@noyrax/5d-database-plugin 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 (369) hide show
  1. package/ADR_VORSCHLAEGE.md +247 -0
  2. package/CHROMADB_SETUP.md +69 -0
  3. package/IMPROVEMENT_ROADMAP.md +435 -0
  4. package/INSTALLATION_READINESS.md +150 -0
  5. package/KNOWN_ISSUES.md +210 -0
  6. package/LICENSE +21 -0
  7. package/MCP_SERVER_SETUP.md +359 -0
  8. package/MCP_SERVER_TEST_REPORT.md +206 -0
  9. package/NOYRAX_INTEGRATION.md +224 -0
  10. package/QUICK_START.md +316 -0
  11. package/README.md +240 -0
  12. package/SETUP_NEW_PROJECT.md +260 -0
  13. package/SYSTEM_ANALYSIS_REPORT.md +341 -0
  14. package/out/api/adr-api.d.ts +22 -0
  15. package/out/api/adr-api.d.ts.map +1 -0
  16. package/out/api/adr-api.js +38 -0
  17. package/out/api/adr-api.js.map +1 -0
  18. package/out/api/bootstrap-api.d.ts +43 -0
  19. package/out/api/bootstrap-api.d.ts.map +1 -0
  20. package/out/api/bootstrap-api.js +88 -0
  21. package/out/api/bootstrap-api.js.map +1 -0
  22. package/out/api/change-api.d.ts +30 -0
  23. package/out/api/change-api.d.ts.map +1 -0
  24. package/out/api/change-api.js +54 -0
  25. package/out/api/change-api.js.map +1 -0
  26. package/out/api/context-builder.d.ts +81 -0
  27. package/out/api/context-builder.d.ts.map +1 -0
  28. package/out/api/context-builder.js +288 -0
  29. package/out/api/context-builder.js.map +1 -0
  30. package/out/api/cross-dimension-api.d.ts +43 -0
  31. package/out/api/cross-dimension-api.d.ts.map +1 -0
  32. package/out/api/cross-dimension-api.js +55 -0
  33. package/out/api/cross-dimension-api.js.map +1 -0
  34. package/out/api/dependency-api.d.ts +26 -0
  35. package/out/api/dependency-api.d.ts.map +1 -0
  36. package/out/api/dependency-api.js +46 -0
  37. package/out/api/dependency-api.js.map +1 -0
  38. package/out/api/learning-path-api.d.ts +49 -0
  39. package/out/api/learning-path-api.d.ts.map +1 -0
  40. package/out/api/learning-path-api.js +174 -0
  41. package/out/api/learning-path-api.js.map +1 -0
  42. package/out/api/module-api.d.ts +26 -0
  43. package/out/api/module-api.d.ts.map +1 -0
  44. package/out/api/module-api.js +46 -0
  45. package/out/api/module-api.js.map +1 -0
  46. package/out/api/search-api.d.ts +64 -0
  47. package/out/api/search-api.d.ts.map +1 -0
  48. package/out/api/search-api.js +235 -0
  49. package/out/api/search-api.js.map +1 -0
  50. package/out/api/self-explanation-api.d.ts +71 -0
  51. package/out/api/self-explanation-api.d.ts.map +1 -0
  52. package/out/api/self-explanation-api.js +153 -0
  53. package/out/api/self-explanation-api.js.map +1 -0
  54. package/out/api/semantic-search-api.d.ts +64 -0
  55. package/out/api/semantic-search-api.d.ts.map +1 -0
  56. package/out/api/semantic-search-api.js +205 -0
  57. package/out/api/semantic-search-api.js.map +1 -0
  58. package/out/api/symbol-api.d.ts +22 -0
  59. package/out/api/symbol-api.d.ts.map +1 -0
  60. package/out/api/symbol-api.js +38 -0
  61. package/out/api/symbol-api.js.map +1 -0
  62. package/out/api/vector-api.d.ts +26 -0
  63. package/out/api/vector-api.d.ts.map +1 -0
  64. package/out/api/vector-api.js +49 -0
  65. package/out/api/vector-api.js.map +1 -0
  66. package/out/cli/embedding-cli.d.ts +3 -0
  67. package/out/cli/embedding-cli.d.ts.map +1 -0
  68. package/out/cli/embedding-cli.js +151 -0
  69. package/out/cli/embedding-cli.js.map +1 -0
  70. package/out/cli/ingest-cli.d.ts +3 -0
  71. package/out/cli/ingest-cli.d.ts.map +1 -0
  72. package/out/cli/ingest-cli.js +145 -0
  73. package/out/cli/ingest-cli.js.map +1 -0
  74. package/out/cli/mcp-server-cli.d.ts +3 -0
  75. package/out/cli/mcp-server-cli.d.ts.map +1 -0
  76. package/out/cli/mcp-server-cli.js +159 -0
  77. package/out/cli/mcp-server-cli.js.map +1 -0
  78. package/out/cli/query-cli.d.ts +3 -0
  79. package/out/cli/query-cli.d.ts.map +1 -0
  80. package/out/cli/query-cli.js +217 -0
  81. package/out/cli/query-cli.js.map +1 -0
  82. package/out/cli/semantic-search-cli.d.ts +3 -0
  83. package/out/cli/semantic-search-cli.d.ts.map +1 -0
  84. package/out/cli/semantic-search-cli.js +196 -0
  85. package/out/cli/semantic-search-cli.js.map +1 -0
  86. package/out/cli/test-chromadb.d.ts +3 -0
  87. package/out/cli/test-chromadb.d.ts.map +1 -0
  88. package/out/cli/test-chromadb.js +204 -0
  89. package/out/cli/test-chromadb.js.map +1 -0
  90. package/out/cli/test-v-dimension.d.ts +3 -0
  91. package/out/cli/test-v-dimension.d.ts.map +1 -0
  92. package/out/cli/test-v-dimension.js +330 -0
  93. package/out/cli/test-v-dimension.js.map +1 -0
  94. package/out/cli/tool-cli.d.ts +3 -0
  95. package/out/cli/tool-cli.d.ts.map +1 -0
  96. package/out/cli/tool-cli.js +237 -0
  97. package/out/cli/tool-cli.js.map +1 -0
  98. package/out/cli/verify-openai-key.d.ts +3 -0
  99. package/out/cli/verify-openai-key.d.ts.map +1 -0
  100. package/out/cli/verify-openai-key.js +141 -0
  101. package/out/cli/verify-openai-key.js.map +1 -0
  102. package/out/cli/verify-vss-status.d.ts +3 -0
  103. package/out/cli/verify-vss-status.d.ts.map +1 -0
  104. package/out/cli/verify-vss-status.js +185 -0
  105. package/out/cli/verify-vss-status.js.map +1 -0
  106. package/out/core/chromadb-vector-database.d.ts +52 -0
  107. package/out/core/chromadb-vector-database.d.ts.map +1 -0
  108. package/out/core/chromadb-vector-database.js +276 -0
  109. package/out/core/chromadb-vector-database.js.map +1 -0
  110. package/out/core/docs-path-resolver.d.ts +43 -0
  111. package/out/core/docs-path-resolver.d.ts.map +1 -0
  112. package/out/core/docs-path-resolver.js +137 -0
  113. package/out/core/docs-path-resolver.js.map +1 -0
  114. package/out/core/id-mapper.d.ts +68 -0
  115. package/out/core/id-mapper.d.ts.map +1 -0
  116. package/out/core/id-mapper.js +132 -0
  117. package/out/core/id-mapper.js.map +1 -0
  118. package/out/core/migration-manager.d.ts +75 -0
  119. package/out/core/migration-manager.d.ts.map +1 -0
  120. package/out/core/migration-manager.js +212 -0
  121. package/out/core/migration-manager.js.map +1 -0
  122. package/out/core/multi-db-manager.d.ts +84 -0
  123. package/out/core/multi-db-manager.d.ts.map +1 -0
  124. package/out/core/multi-db-manager.js +206 -0
  125. package/out/core/multi-db-manager.js.map +1 -0
  126. package/out/core/transaction-manager.d.ts +69 -0
  127. package/out/core/transaction-manager.d.ts.map +1 -0
  128. package/out/core/transaction-manager.js +138 -0
  129. package/out/core/transaction-manager.js.map +1 -0
  130. package/out/core/vector-database-factory.d.ts +25 -0
  131. package/out/core/vector-database-factory.d.ts.map +1 -0
  132. package/out/core/vector-database-factory.js +82 -0
  133. package/out/core/vector-database-factory.js.map +1 -0
  134. package/out/core/vector-database-interface.d.ts +50 -0
  135. package/out/core/vector-database-interface.d.ts.map +1 -0
  136. package/out/core/vector-database-interface.js +3 -0
  137. package/out/core/vector-database-interface.js.map +1 -0
  138. package/out/core/vss-loader.d.ts +29 -0
  139. package/out/core/vss-loader.d.ts.map +1 -0
  140. package/out/core/vss-loader.js +150 -0
  141. package/out/core/vss-loader.js.map +1 -0
  142. package/out/core/vss-manager.d.ts +81 -0
  143. package/out/core/vss-manager.d.ts.map +1 -0
  144. package/out/core/vss-manager.js +323 -0
  145. package/out/core/vss-manager.js.map +1 -0
  146. package/out/core/vss-vector-database.d.ts +71 -0
  147. package/out/core/vss-vector-database.d.ts.map +1 -0
  148. package/out/core/vss-vector-database.js +284 -0
  149. package/out/core/vss-vector-database.js.map +1 -0
  150. package/out/embedding/embedding-generator.d.ts +45 -0
  151. package/out/embedding/embedding-generator.d.ts.map +1 -0
  152. package/out/embedding/embedding-generator.js +143 -0
  153. package/out/embedding/embedding-generator.js.map +1 -0
  154. package/out/embedding/embedding-pipeline.d.ts +42 -0
  155. package/out/embedding/embedding-pipeline.d.ts.map +1 -0
  156. package/out/embedding/embedding-pipeline.js +290 -0
  157. package/out/embedding/embedding-pipeline.js.map +1 -0
  158. package/out/extension.d.ts +10 -0
  159. package/out/extension.d.ts.map +1 -0
  160. package/out/extension.js +164 -0
  161. package/out/extension.js.map +1 -0
  162. package/out/ingestors/adr-ingestor.d.ts +41 -0
  163. package/out/ingestors/adr-ingestor.d.ts.map +1 -0
  164. package/out/ingestors/adr-ingestor.js +329 -0
  165. package/out/ingestors/adr-ingestor.js.map +1 -0
  166. package/out/ingestors/base-ingestor.d.ts +30 -0
  167. package/out/ingestors/base-ingestor.d.ts.map +1 -0
  168. package/out/ingestors/base-ingestor.js +3 -0
  169. package/out/ingestors/base-ingestor.js.map +1 -0
  170. package/out/ingestors/change-ingestor.d.ts +36 -0
  171. package/out/ingestors/change-ingestor.d.ts.map +1 -0
  172. package/out/ingestors/change-ingestor.js +216 -0
  173. package/out/ingestors/change-ingestor.js.map +1 -0
  174. package/out/ingestors/dependency-ingestor.d.ts +32 -0
  175. package/out/ingestors/dependency-ingestor.d.ts.map +1 -0
  176. package/out/ingestors/dependency-ingestor.js +194 -0
  177. package/out/ingestors/dependency-ingestor.js.map +1 -0
  178. package/out/ingestors/module-ingestor.d.ts +27 -0
  179. package/out/ingestors/module-ingestor.d.ts.map +1 -0
  180. package/out/ingestors/module-ingestor.js +137 -0
  181. package/out/ingestors/module-ingestor.js.map +1 -0
  182. package/out/ingestors/symbol-ingestor.d.ts +26 -0
  183. package/out/ingestors/symbol-ingestor.d.ts.map +1 -0
  184. package/out/ingestors/symbol-ingestor.js +183 -0
  185. package/out/ingestors/symbol-ingestor.js.map +1 -0
  186. package/out/mcp/resources/adrs.d.ts +13 -0
  187. package/out/mcp/resources/adrs.d.ts.map +1 -0
  188. package/out/mcp/resources/adrs.js +26 -0
  189. package/out/mcp/resources/adrs.js.map +1 -0
  190. package/out/mcp/resources/changes.d.ts +13 -0
  191. package/out/mcp/resources/changes.d.ts.map +1 -0
  192. package/out/mcp/resources/changes.js +26 -0
  193. package/out/mcp/resources/changes.js.map +1 -0
  194. package/out/mcp/resources/dependencies.d.ts +13 -0
  195. package/out/mcp/resources/dependencies.d.ts.map +1 -0
  196. package/out/mcp/resources/dependencies.js +26 -0
  197. package/out/mcp/resources/dependencies.js.map +1 -0
  198. package/out/mcp/resources/modules.d.ts +13 -0
  199. package/out/mcp/resources/modules.d.ts.map +1 -0
  200. package/out/mcp/resources/modules.js +26 -0
  201. package/out/mcp/resources/modules.js.map +1 -0
  202. package/out/mcp/resources/symbols.d.ts +13 -0
  203. package/out/mcp/resources/symbols.d.ts.map +1 -0
  204. package/out/mcp/resources/symbols.js +26 -0
  205. package/out/mcp/resources/symbols.js.map +1 -0
  206. package/out/mcp/server.d.ts +29 -0
  207. package/out/mcp/server.d.ts.map +1 -0
  208. package/out/mcp/server.js +300 -0
  209. package/out/mcp/server.js.map +1 -0
  210. package/out/mcp/tools/architecture-mining.d.ts +46 -0
  211. package/out/mcp/tools/architecture-mining.d.ts.map +1 -0
  212. package/out/mcp/tools/architecture-mining.js +272 -0
  213. package/out/mcp/tools/architecture-mining.js.map +1 -0
  214. package/out/mcp/tools/bootstrap.d.ts +9 -0
  215. package/out/mcp/tools/bootstrap.d.ts.map +1 -0
  216. package/out/mcp/tools/bootstrap.js +14 -0
  217. package/out/mcp/tools/bootstrap.js.map +1 -0
  218. package/out/mcp/tools/cross-analysis.d.ts +18 -0
  219. package/out/mcp/tools/cross-analysis.d.ts.map +1 -0
  220. package/out/mcp/tools/cross-analysis.js +23 -0
  221. package/out/mcp/tools/cross-analysis.js.map +1 -0
  222. package/out/mcp/tools/gap-analysis.d.ts +34 -0
  223. package/out/mcp/tools/gap-analysis.d.ts.map +1 -0
  224. package/out/mcp/tools/gap-analysis.js +106 -0
  225. package/out/mcp/tools/gap-analysis.js.map +1 -0
  226. package/out/mcp/tools/learning-path.d.ts +10 -0
  227. package/out/mcp/tools/learning-path.d.ts.map +1 -0
  228. package/out/mcp/tools/learning-path.js +18 -0
  229. package/out/mcp/tools/learning-path.js.map +1 -0
  230. package/out/mcp/tools/query-dependencies.d.ts +18 -0
  231. package/out/mcp/tools/query-dependencies.d.ts.map +1 -0
  232. package/out/mcp/tools/query-dependencies.js +31 -0
  233. package/out/mcp/tools/query-dependencies.js.map +1 -0
  234. package/out/mcp/tools/query-modules.d.ts +17 -0
  235. package/out/mcp/tools/query-modules.d.ts.map +1 -0
  236. package/out/mcp/tools/query-modules.js +22 -0
  237. package/out/mcp/tools/query-modules.js.map +1 -0
  238. package/out/mcp/tools/query-symbols.d.ts +18 -0
  239. package/out/mcp/tools/query-symbols.d.ts.map +1 -0
  240. package/out/mcp/tools/query-symbols.js +32 -0
  241. package/out/mcp/tools/query-symbols.js.map +1 -0
  242. package/out/mcp/tools/semantic-discovery.d.ts +12 -0
  243. package/out/mcp/tools/semantic-discovery.d.ts.map +1 -0
  244. package/out/mcp/tools/semantic-discovery.js +35 -0
  245. package/out/mcp/tools/semantic-discovery.js.map +1 -0
  246. package/out/mcp/tools/system-explanation.d.ts +9 -0
  247. package/out/mcp/tools/system-explanation.d.ts.map +1 -0
  248. package/out/mcp/tools/system-explanation.js +14 -0
  249. package/out/mcp/tools/system-explanation.js.map +1 -0
  250. package/out/mcp/types.d.ts +19 -0
  251. package/out/mcp/types.d.ts.map +1 -0
  252. package/out/mcp/types.js +6 -0
  253. package/out/mcp/types.js.map +1 -0
  254. package/out/models/adr.d.ts +26 -0
  255. package/out/models/adr.d.ts.map +1 -0
  256. package/out/models/adr.js +3 -0
  257. package/out/models/adr.js.map +1 -0
  258. package/out/models/change.d.ts +42 -0
  259. package/out/models/change.d.ts.map +1 -0
  260. package/out/models/change.js +3 -0
  261. package/out/models/change.js.map +1 -0
  262. package/out/models/dependency.d.ts +37 -0
  263. package/out/models/dependency.d.ts.map +1 -0
  264. package/out/models/dependency.js +3 -0
  265. package/out/models/dependency.js.map +1 -0
  266. package/out/models/entity-reference.d.ts +20 -0
  267. package/out/models/entity-reference.d.ts.map +1 -0
  268. package/out/models/entity-reference.js +19 -0
  269. package/out/models/entity-reference.js.map +1 -0
  270. package/out/models/module.d.ts +26 -0
  271. package/out/models/module.d.ts.map +1 -0
  272. package/out/models/module.js +3 -0
  273. package/out/models/module.js.map +1 -0
  274. package/out/models/symbol.d.ts +31 -0
  275. package/out/models/symbol.d.ts.map +1 -0
  276. package/out/models/symbol.js +3 -0
  277. package/out/models/symbol.js.map +1 -0
  278. package/out/repositories/adr-repository.d.ts +41 -0
  279. package/out/repositories/adr-repository.d.ts.map +1 -0
  280. package/out/repositories/adr-repository.js +128 -0
  281. package/out/repositories/adr-repository.js.map +1 -0
  282. package/out/repositories/base-repository.d.ts +86 -0
  283. package/out/repositories/base-repository.d.ts.map +1 -0
  284. package/out/repositories/base-repository.js +66 -0
  285. package/out/repositories/base-repository.js.map +1 -0
  286. package/out/repositories/change-repository.d.ts +40 -0
  287. package/out/repositories/change-repository.d.ts.map +1 -0
  288. package/out/repositories/change-repository.js +150 -0
  289. package/out/repositories/change-repository.js.map +1 -0
  290. package/out/repositories/dependency-repository.d.ts +40 -0
  291. package/out/repositories/dependency-repository.d.ts.map +1 -0
  292. package/out/repositories/dependency-repository.js +129 -0
  293. package/out/repositories/dependency-repository.js.map +1 -0
  294. package/out/repositories/embedding-repository.d.ts +64 -0
  295. package/out/repositories/embedding-repository.d.ts.map +1 -0
  296. package/out/repositories/embedding-repository.js +126 -0
  297. package/out/repositories/embedding-repository.js.map +1 -0
  298. package/out/repositories/importance-repository.d.ts +63 -0
  299. package/out/repositories/importance-repository.d.ts.map +1 -0
  300. package/out/repositories/importance-repository.js +117 -0
  301. package/out/repositories/importance-repository.js.map +1 -0
  302. package/out/repositories/module-repository.d.ts +37 -0
  303. package/out/repositories/module-repository.d.ts.map +1 -0
  304. package/out/repositories/module-repository.js +122 -0
  305. package/out/repositories/module-repository.js.map +1 -0
  306. package/out/repositories/navigation-repository.d.ts +117 -0
  307. package/out/repositories/navigation-repository.d.ts.map +1 -0
  308. package/out/repositories/navigation-repository.js +211 -0
  309. package/out/repositories/navigation-repository.js.map +1 -0
  310. package/out/repositories/symbol-repository.d.ts +37 -0
  311. package/out/repositories/symbol-repository.d.ts.map +1 -0
  312. package/out/repositories/symbol-repository.js +136 -0
  313. package/out/repositories/symbol-repository.js.map +1 -0
  314. package/out/services/cross-dimension-linker.d.ts +45 -0
  315. package/out/services/cross-dimension-linker.d.ts.map +1 -0
  316. package/out/services/cross-dimension-linker.js +98 -0
  317. package/out/services/cross-dimension-linker.js.map +1 -0
  318. package/out/services/importance-scorer.d.ts +47 -0
  319. package/out/services/importance-scorer.d.ts.map +1 -0
  320. package/out/services/importance-scorer.js +188 -0
  321. package/out/services/importance-scorer.js.map +1 -0
  322. package/out/services/ingestion-orchestrator.d.ts +49 -0
  323. package/out/services/ingestion-orchestrator.d.ts.map +1 -0
  324. package/out/services/ingestion-orchestrator.js +140 -0
  325. package/out/services/ingestion-orchestrator.js.map +1 -0
  326. package/out/services/navigation-builder.d.ts +29 -0
  327. package/out/services/navigation-builder.d.ts.map +1 -0
  328. package/out/services/navigation-builder.js +229 -0
  329. package/out/services/navigation-builder.js.map +1 -0
  330. package/out/services/system-model-builder.d.ts +40 -0
  331. package/out/services/system-model-builder.d.ts.map +1 -0
  332. package/out/services/system-model-builder.js +88 -0
  333. package/out/services/system-model-builder.js.map +1 -0
  334. package/out/ui/commands.d.ts +9 -0
  335. package/out/ui/commands.d.ts.map +1 -0
  336. package/out/ui/commands.js +123 -0
  337. package/out/ui/commands.js.map +1 -0
  338. package/out/ui/database-explorer.d.ts +27 -0
  339. package/out/ui/database-explorer.d.ts.map +1 -0
  340. package/out/ui/database-explorer.js +169 -0
  341. package/out/ui/database-explorer.js.map +1 -0
  342. package/out/ui/detail-view-provider.d.ts +86 -0
  343. package/out/ui/detail-view-provider.d.ts.map +1 -0
  344. package/out/ui/detail-view-provider.js +1037 -0
  345. package/out/ui/detail-view-provider.js.map +1 -0
  346. package/out/ui/search-provider.d.ts +30 -0
  347. package/out/ui/search-provider.d.ts.map +1 -0
  348. package/out/ui/search-provider.js +240 -0
  349. package/out/ui/search-provider.js.map +1 -0
  350. package/out/ui/status-provider.d.ts +17 -0
  351. package/out/ui/status-provider.d.ts.map +1 -0
  352. package/out/ui/status-provider.js +76 -0
  353. package/out/ui/status-provider.js.map +1 -0
  354. package/out/validators/consistency-validator.d.ts +37 -0
  355. package/out/validators/consistency-validator.d.ts.map +1 -0
  356. package/out/validators/consistency-validator.js +93 -0
  357. package/out/validators/consistency-validator.js.map +1 -0
  358. package/out/validators/integrity-validator.d.ts +45 -0
  359. package/out/validators/integrity-validator.d.ts.map +1 -0
  360. package/out/validators/integrity-validator.js +115 -0
  361. package/out/validators/integrity-validator.js.map +1 -0
  362. package/package.json +173 -0
  363. package/schemas/sqlite/001_initial_modules.sql +39 -0
  364. package/schemas/sqlite/002_initial_symbols.sql +46 -0
  365. package/schemas/sqlite/003_initial_dependencies.sql +51 -0
  366. package/schemas/sqlite/004_initial_adrs.sql +41 -0
  367. package/schemas/sqlite/005_initial_changes.sql +54 -0
  368. package/schemas/sqlite/006_initial_ingestion.sql +34 -0
  369. package/schemas/sqlite/006_vectors_schema.sql +73 -0
@@ -0,0 +1,1037 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DetailViewProvider = void 0;
37
+ const vscode = __importStar(require("vscode"));
38
+ const path = __importStar(require("path"));
39
+ const module_api_1 = require("../api/module-api");
40
+ const symbol_api_1 = require("../api/symbol-api");
41
+ const adr_api_1 = require("../api/adr-api");
42
+ const dependency_api_1 = require("../api/dependency-api");
43
+ const change_api_1 = require("../api/change-api");
44
+ const symbol_repository_1 = require("../repositories/symbol-repository");
45
+ const adr_repository_1 = require("../repositories/adr-repository");
46
+ const cross_dimension_api_1 = require("../api/cross-dimension-api");
47
+ const id_mapper_1 = require("../core/id-mapper");
48
+ /**
49
+ * Provider for detail views in VS Code WebView.
50
+ * Shows detailed information for Modules, Symbols, ADRs, Dependencies, and Change Reports.
51
+ */
52
+ class DetailViewProvider {
53
+ constructor(dbManager) {
54
+ this.panels = new Map();
55
+ this.dbManager = dbManager;
56
+ this.pluginId = dbManager.getPluginId();
57
+ const idMapper = new id_mapper_1.IdMapper(dbManager);
58
+ this.crossDimensionApi = new cross_dimension_api_1.CrossDimensionApi(dbManager, idMapper);
59
+ }
60
+ /**
61
+ * Shows module detail view.
62
+ */
63
+ async showModuleDetail(moduleId) {
64
+ const moduleApi = new module_api_1.ModuleApi(this.dbManager);
65
+ // Try to get by ID first (moduleId is typically an ID)
66
+ let module = await moduleApi.getModuleById(moduleId, this.pluginId);
67
+ if (!module) {
68
+ // Try to get by file path if moduleId is actually a file path
69
+ module = await moduleApi.getModuleByPath(moduleId, this.pluginId);
70
+ }
71
+ if (!module) {
72
+ vscode.window.showErrorMessage(`Module not found: ${moduleId}`);
73
+ return;
74
+ }
75
+ await this.createModulePanel(module);
76
+ }
77
+ /**
78
+ * Shows symbol detail view.
79
+ */
80
+ async showSymbolDetail(symbolId) {
81
+ const symbolApi = new symbol_api_1.SymbolApi(this.dbManager);
82
+ const symbol = await symbolApi.getSymbolById(symbolId, this.pluginId);
83
+ if (!symbol) {
84
+ vscode.window.showErrorMessage(`Symbol not found: ${symbolId}`);
85
+ return;
86
+ }
87
+ await this.createSymbolPanel(symbol);
88
+ }
89
+ /**
90
+ * Shows ADR detail view.
91
+ */
92
+ async showAdrDetail(adrId) {
93
+ const adrApi = new adr_api_1.AdrApi(this.dbManager);
94
+ // Try to get by ADR number first
95
+ const adr = await adrApi.getAdrByNumber(adrId, this.pluginId);
96
+ if (!adr) {
97
+ // Try to get by ID if adrId is actually an ID
98
+ const db = await this.dbManager.getDatabase('W');
99
+ const repo = new adr_repository_1.AdrRepository(db);
100
+ const adrById = await repo.getById(adrId, this.pluginId);
101
+ if (!adrById) {
102
+ vscode.window.showErrorMessage(`ADR not found: ${adrId}`);
103
+ return;
104
+ }
105
+ await this.createAdrPanel(adrById);
106
+ }
107
+ else {
108
+ await this.createAdrPanel(adr);
109
+ }
110
+ }
111
+ /**
112
+ * Shows dependency detail view.
113
+ */
114
+ async showDependencyDetail(dependencyId) {
115
+ const dependencyApi = new dependency_api_1.DependencyApi(this.dbManager);
116
+ const dependency = await dependencyApi.getDependencyById(dependencyId, this.pluginId);
117
+ if (!dependency) {
118
+ vscode.window.showErrorMessage(`Dependency not found: ${dependencyId}`);
119
+ return;
120
+ }
121
+ await this.createDependencyPanel(dependency);
122
+ }
123
+ /**
124
+ * Shows change report detail view.
125
+ */
126
+ async showChangeDetail(reportId) {
127
+ const changeApi = new change_api_1.ChangeApi(this.dbManager);
128
+ const report = await changeApi.getChangeReportById(reportId, this.pluginId);
129
+ if (!report) {
130
+ vscode.window.showErrorMessage(`Change report not found: ${reportId}`);
131
+ return;
132
+ }
133
+ const symbolChanges = await changeApi.getSymbolChanges(reportId);
134
+ const dependencyChanges = await changeApi.getDependencyChanges(reportId);
135
+ await this.createChangePanel(report, symbolChanges, dependencyChanges);
136
+ }
137
+ /**
138
+ * Creates a WebView panel for module detail.
139
+ */
140
+ async createModulePanel(module) {
141
+ const panelKey = `module-${module.id}`;
142
+ // Reuse existing panel if available
143
+ const existingPanel = this.panels.get(panelKey);
144
+ if (existingPanel) {
145
+ existingPanel.reveal();
146
+ return;
147
+ }
148
+ // Get related symbols
149
+ const relatedSymbols = await this.crossDimensionApi.getSymbolsForModule(module.file_path, this.pluginId);
150
+ const panel = vscode.window.createWebviewPanel('5d-database-module-detail', `Module: ${path.basename(module.file_path)}`, vscode.ViewColumn.One, {
151
+ enableScripts: true,
152
+ retainContextWhenHidden: true
153
+ });
154
+ panel.webview.html = this.getModuleHtml(module, relatedSymbols.map(s => ({ external_id: s.external_id, label: s.external_id })));
155
+ // Handle messages from webview (for command links)
156
+ panel.webview.onDidReceiveMessage(async (message) => {
157
+ if (message.command === 'executeCommand') {
158
+ const command = message.commandName;
159
+ const args = message.args || [];
160
+ await vscode.commands.executeCommand(command, ...args);
161
+ }
162
+ }, null, []);
163
+ panel.onDidDispose(() => {
164
+ this.panels.delete(panelKey);
165
+ });
166
+ this.panels.set(panelKey, panel);
167
+ }
168
+ /**
169
+ * Creates a WebView panel for symbol detail.
170
+ */
171
+ async createSymbolPanel(symbol) {
172
+ const panelKey = `symbol-${symbol.id}`;
173
+ // Reuse existing panel if available
174
+ const existingPanel = this.panels.get(panelKey);
175
+ if (existingPanel) {
176
+ existingPanel.reveal();
177
+ return;
178
+ }
179
+ // Get symbol dependencies
180
+ const db = await this.dbManager.getDatabase('Y');
181
+ const symbolRepo = new symbol_repository_1.SymbolRepository(db);
182
+ const dependencies = await symbolRepo.getSymbolDependencies(symbol.id);
183
+ // Get related module
184
+ const relatedModule = await this.crossDimensionApi.resolveSymbolToModule(symbol.symbol_id, this.pluginId);
185
+ const panel = vscode.window.createWebviewPanel('5d-database-symbol-detail', `Symbol: ${symbol.name}`, vscode.ViewColumn.One, {
186
+ enableScripts: true,
187
+ retainContextWhenHidden: true
188
+ });
189
+ panel.webview.html = this.getSymbolHtml(symbol, dependencies, relatedModule ? { external_id: relatedModule.external_id, label: relatedModule.external_id } : null);
190
+ // Handle messages from webview (for command links)
191
+ panel.webview.onDidReceiveMessage(async (message) => {
192
+ if (message.command === 'executeCommand') {
193
+ const command = message.commandName;
194
+ const args = message.args || [];
195
+ await vscode.commands.executeCommand(command, ...args);
196
+ }
197
+ }, null, []);
198
+ panel.onDidDispose(() => {
199
+ this.panels.delete(panelKey);
200
+ });
201
+ this.panels.set(panelKey, panel);
202
+ }
203
+ /**
204
+ * Creates a WebView panel for ADR detail.
205
+ */
206
+ async createAdrPanel(adr) {
207
+ const panelKey = `adr-${adr.id}`;
208
+ // Reuse existing panel if available
209
+ const existingPanel = this.panels.get(panelKey);
210
+ if (existingPanel) {
211
+ existingPanel.reveal();
212
+ return;
213
+ }
214
+ // Get ADR file mappings
215
+ const db = await this.dbManager.getDatabase('W');
216
+ const adrRepo = new adr_repository_1.AdrRepository(db);
217
+ const fileMappings = await adrRepo.getAdrFileMappings(adr.id);
218
+ // Get ADRs for each file (inverse mapping)
219
+ const relatedAdrs = [];
220
+ for (const mapping of fileMappings) {
221
+ const adrsForFile = await this.crossDimensionApi.getAdrsForFilePath(mapping.file_path, this.pluginId);
222
+ if (adrsForFile.length > 0) {
223
+ // Get ADR details to get title
224
+ const adrApi = new adr_api_1.AdrApi(this.dbManager);
225
+ const adrDetails = await Promise.all(adrsForFile.map(a => adrApi.getAdrByNumber(a.external_id, this.pluginId)));
226
+ relatedAdrs.push({
227
+ file_path: mapping.file_path,
228
+ adrs: adrDetails
229
+ .filter((a) => a !== null)
230
+ .map(a => ({ adr_number: a.adr_number, title: a.title }))
231
+ });
232
+ }
233
+ }
234
+ const panel = vscode.window.createWebviewPanel('5d-database-adr-detail', `ADR-${adr.adr_number}: ${adr.title}`, vscode.ViewColumn.One, {
235
+ enableScripts: true,
236
+ retainContextWhenHidden: true
237
+ });
238
+ panel.webview.html = this.getAdrHtml(adr, fileMappings, relatedAdrs);
239
+ // Handle messages from webview (for command links)
240
+ panel.webview.onDidReceiveMessage(async (message) => {
241
+ if (message.command === 'executeCommand') {
242
+ const command = message.commandName;
243
+ const args = message.args || [];
244
+ await vscode.commands.executeCommand(command, ...args);
245
+ }
246
+ }, null, []);
247
+ panel.onDidDispose(() => {
248
+ this.panels.delete(panelKey);
249
+ });
250
+ this.panels.set(panelKey, panel);
251
+ }
252
+ /**
253
+ * Creates a WebView panel for dependency detail.
254
+ */
255
+ async createDependencyPanel(dependency) {
256
+ const panelKey = `dependency-${dependency.id}`;
257
+ // Reuse existing panel if available
258
+ const existingPanel = this.panels.get(panelKey);
259
+ if (existingPanel) {
260
+ existingPanel.reveal();
261
+ return;
262
+ }
263
+ // Get related modules
264
+ const moduleApi = new module_api_1.ModuleApi(this.dbManager);
265
+ const fromModule = await moduleApi.getModuleByPath(dependency.from_module, this.pluginId);
266
+ const toModule = await moduleApi.getModuleByPath(dependency.to_module, this.pluginId);
267
+ const panel = vscode.window.createWebviewPanel('5d-database-dependency-detail', `Dependency: ${path.basename(dependency.from_module)} → ${path.basename(dependency.to_module)}`, vscode.ViewColumn.One, {
268
+ enableScripts: true,
269
+ retainContextWhenHidden: true
270
+ });
271
+ panel.webview.html = this.getDependencyHtml(dependency, fromModule, toModule);
272
+ // Handle messages from webview (for command links)
273
+ panel.webview.onDidReceiveMessage(async (message) => {
274
+ if (message.command === 'executeCommand') {
275
+ const command = message.commandName;
276
+ const args = message.args || [];
277
+ await vscode.commands.executeCommand(command, ...args);
278
+ }
279
+ }, null, []);
280
+ panel.onDidDispose(() => {
281
+ this.panels.delete(panelKey);
282
+ });
283
+ this.panels.set(panelKey, panel);
284
+ }
285
+ /**
286
+ * Creates a WebView panel for change report detail.
287
+ */
288
+ async createChangePanel(report, symbolChanges, dependencyChanges) {
289
+ const panelKey = `change-${report.id}`;
290
+ // Reuse existing panel if available
291
+ const existingPanel = this.panels.get(panelKey);
292
+ if (existingPanel) {
293
+ existingPanel.reveal();
294
+ return;
295
+ }
296
+ const panel = vscode.window.createWebviewPanel('5d-database-change-detail', `Change Report: ${report.run_type} - ${report.created_at.toLocaleDateString()}`, vscode.ViewColumn.One, {
297
+ enableScripts: true,
298
+ retainContextWhenHidden: true
299
+ });
300
+ panel.webview.html = this.getChangeHtml(report, symbolChanges, dependencyChanges);
301
+ // Handle messages from webview (for command links)
302
+ panel.webview.onDidReceiveMessage(async (message) => {
303
+ if (message.command === 'executeCommand') {
304
+ const command = message.commandName;
305
+ const args = message.args || [];
306
+ await vscode.commands.executeCommand(command, ...args);
307
+ }
308
+ }, null, []);
309
+ panel.onDidDispose(() => {
310
+ this.panels.delete(panelKey);
311
+ });
312
+ this.panels.set(panelKey, panel);
313
+ }
314
+ /**
315
+ * Generates HTML for module detail view.
316
+ */
317
+ getModuleHtml(module, relatedSymbols) {
318
+ const markdown = module.content_markdown || '*No content available*';
319
+ const openFileCommand = JSON.stringify(['5d-database.openSourceFile', [module.file_path]]);
320
+ return `<!DOCTYPE html>
321
+ <html lang="en">
322
+ <head>
323
+ <meta charset="UTF-8">
324
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
325
+ <title>Module: ${this.escapeHtml(module.file_path)}</title>
326
+ <style>
327
+ body {
328
+ font-family: var(--vscode-font-family);
329
+ padding: 20px;
330
+ color: var(--vscode-foreground);
331
+ background-color: var(--vscode-editor-background);
332
+ }
333
+ h1 {
334
+ color: var(--vscode-textLink-foreground);
335
+ border-bottom: 2px solid var(--vscode-panel-border);
336
+ padding-bottom: 10px;
337
+ }
338
+ .metadata {
339
+ background-color: var(--vscode-editor-inactiveSelectionBackground);
340
+ padding: 15px;
341
+ border-radius: 5px;
342
+ margin-bottom: 20px;
343
+ }
344
+ .metadata-item {
345
+ margin: 5px 0;
346
+ }
347
+ .metadata-label {
348
+ font-weight: bold;
349
+ color: var(--vscode-textLink-foreground);
350
+ }
351
+ .content {
352
+ margin-top: 20px;
353
+ }
354
+ pre {
355
+ background-color: var(--vscode-textCodeBlock-background);
356
+ padding: 10px;
357
+ border-radius: 5px;
358
+ overflow-x: auto;
359
+ }
360
+ code {
361
+ font-family: var(--vscode-editor-font-family);
362
+ }
363
+ </style>
364
+ <script>
365
+ const vscode = acquireVsCodeApi();
366
+ document.addEventListener('DOMContentLoaded', () => {
367
+ document.querySelectorAll('a[data-command]').forEach(link => {
368
+ link.addEventListener('click', (e) => {
369
+ e.preventDefault();
370
+ const command = link.getAttribute('data-command');
371
+ const argsJson = link.getAttribute('data-args');
372
+ const args = argsJson ? JSON.parse(argsJson) : [];
373
+ vscode.postMessage({
374
+ command: 'executeCommand',
375
+ commandName: command,
376
+ args: args
377
+ });
378
+ });
379
+ });
380
+ });
381
+ </script>
382
+ </head>
383
+ <body>
384
+ <h1>Module: ${this.escapeHtml(module.file_path)}</h1>
385
+
386
+ <div class="metadata">
387
+ <div class="metadata-item">
388
+ <span class="metadata-label">File Path:</span>
389
+ <a href="#" data-command="5d-database.openSourceFile" data-args="${this.escapeHtml(JSON.stringify([module.file_path]))}" style="color: var(--vscode-textLink-foreground); text-decoration: underline; cursor: pointer;">${this.escapeHtml(module.file_path)}</a>
390
+ <span style="margin-left: 10px; color: var(--vscode-descriptionForeground);">(click to open)</span>
391
+ </div>
392
+ <div class="metadata-item">
393
+ <span class="metadata-label">Content Hash:</span> <code>${this.escapeHtml(module.content_hash)}</code>
394
+ </div>
395
+ <div class="metadata-item">
396
+ <span class="metadata-label">Created:</span> ${module.created_at.toLocaleString()}
397
+ </div>
398
+ <div class="metadata-item">
399
+ <span class="metadata-label">Updated:</span> ${module.updated_at.toLocaleString()}
400
+ </div>
401
+ </div>
402
+
403
+ <div class="content">
404
+ ${this.markdownToHtml(markdown)}
405
+ </div>
406
+ </body>
407
+ </html>`;
408
+ }
409
+ /**
410
+ * Generates HTML for symbol detail view.
411
+ */
412
+ getSymbolHtml(symbol, dependencies, relatedModule) {
413
+ let signature;
414
+ try {
415
+ const sigJson = JSON.parse(symbol.signature_json);
416
+ signature = typeof sigJson === 'string' ? sigJson : JSON.stringify(sigJson, null, 2);
417
+ }
418
+ catch {
419
+ signature = symbol.signature_json;
420
+ }
421
+ const depsHtml = dependencies.length > 0
422
+ ? dependencies.map(dep => {
423
+ let symbolsList = '';
424
+ if (dep.dependency_symbols_json) {
425
+ try {
426
+ const symbols = JSON.parse(dep.dependency_symbols_json);
427
+ if (Array.isArray(symbols) && symbols.length > 0) {
428
+ symbolsList = ` (${symbols.join(', ')})`;
429
+ }
430
+ }
431
+ catch {
432
+ // Ignore parse errors
433
+ }
434
+ }
435
+ const flags = [];
436
+ if (dep.is_type_only)
437
+ flags.push('type-only');
438
+ if (dep.is_reexport)
439
+ flags.push('reexport');
440
+ const flagsStr = flags.length > 0 ? ` [${flags.join(', ')}]` : '';
441
+ const depArgs = this.escapeHtml(JSON.stringify([dep.dependency_module]));
442
+ return `<li><a href="#" data-command="5d-database.openSourceFile" data-args="${depArgs}" style="cursor: pointer;"><code>${this.escapeHtml(dep.dependency_module)}</code></a>${symbolsList}${flagsStr}</li>`;
443
+ }).join('\n')
444
+ : '<li><em>No dependencies</em></li>';
445
+ return `<!DOCTYPE html>
446
+ <html lang="en">
447
+ <head>
448
+ <meta charset="UTF-8">
449
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
450
+ <title>Symbol: ${this.escapeHtml(symbol.name)}</title>
451
+ <style>
452
+ body {
453
+ font-family: var(--vscode-font-family);
454
+ padding: 20px;
455
+ color: var(--vscode-foreground);
456
+ background-color: var(--vscode-editor-background);
457
+ }
458
+ h1 {
459
+ color: var(--vscode-textLink-foreground);
460
+ border-bottom: 2px solid var(--vscode-panel-border);
461
+ padding-bottom: 10px;
462
+ }
463
+ .metadata {
464
+ background-color: var(--vscode-editor-inactiveSelectionBackground);
465
+ padding: 15px;
466
+ border-radius: 5px;
467
+ margin-bottom: 20px;
468
+ }
469
+ .metadata-item {
470
+ margin: 5px 0;
471
+ }
472
+ .metadata-label {
473
+ font-weight: bold;
474
+ color: var(--vscode-textLink-foreground);
475
+ }
476
+ .signature {
477
+ background-color: var(--vscode-textCodeBlock-background);
478
+ padding: 10px;
479
+ border-radius: 5px;
480
+ margin: 10px 0;
481
+ overflow-x: auto;
482
+ }
483
+ .dependencies {
484
+ margin-top: 20px;
485
+ }
486
+ .dependencies ul {
487
+ list-style-type: none;
488
+ padding-left: 0;
489
+ }
490
+ .dependencies li {
491
+ margin: 5px 0;
492
+ padding: 5px;
493
+ background-color: var(--vscode-editor-inactiveSelectionBackground);
494
+ border-radius: 3px;
495
+ }
496
+ a {
497
+ color: var(--vscode-textLink-foreground);
498
+ text-decoration: underline;
499
+ cursor: pointer;
500
+ }
501
+ a:hover {
502
+ color: var(--vscode-textLink-activeForeground);
503
+ }
504
+ code {
505
+ font-family: var(--vscode-editor-font-family);
506
+ }
507
+ </style>
508
+ <script>
509
+ const vscode = acquireVsCodeApi();
510
+ document.addEventListener('DOMContentLoaded', () => {
511
+ document.querySelectorAll('a[data-command]').forEach(link => {
512
+ link.addEventListener('click', (e) => {
513
+ e.preventDefault();
514
+ const command = link.getAttribute('data-command');
515
+ const argsJson = link.getAttribute('data-args');
516
+ const args = argsJson ? JSON.parse(argsJson) : [];
517
+ vscode.postMessage({
518
+ command: 'executeCommand',
519
+ commandName: command,
520
+ args: args
521
+ });
522
+ });
523
+ });
524
+ });
525
+ </script>
526
+ </head>
527
+ <body>
528
+ <h1>Symbol: ${this.escapeHtml(symbol.name)}</h1>
529
+
530
+ <div class="metadata">
531
+ <div class="metadata-item">
532
+ <span class="metadata-label">Name:</span> ${this.escapeHtml(symbol.name)}
533
+ </div>
534
+ <div class="metadata-item">
535
+ <span class="metadata-label">Kind:</span> ${this.escapeHtml(symbol.kind)}
536
+ </div>
537
+ <div class="metadata-item">
538
+ <span class="metadata-label">Path:</span>
539
+ <a href="#" data-command="5d-database.openSourceFile" data-args="${this.escapeHtml(JSON.stringify([symbol.path]))}" style="color: var(--vscode-textLink-foreground); text-decoration: underline; cursor: pointer;">${this.escapeHtml(symbol.path)}</a>
540
+ <span style="margin-left: 10px; color: var(--vscode-descriptionForeground);">(click to open)</span>
541
+ </div>
542
+ <div class="metadata-item">
543
+ <span class="metadata-label">Symbol ID:</span> <code>${this.escapeHtml(symbol.symbol_id)}</code>
544
+ </div>
545
+ ${symbol.summary ? `<div class="metadata-item"><span class="metadata-label">Summary:</span> ${this.escapeHtml(symbol.summary)}</div>` : ''}
546
+ <div class="metadata-item">
547
+ <span class="metadata-label">Created:</span> ${symbol.created_at.toLocaleString()}
548
+ </div>
549
+ <div class="metadata-item">
550
+ <span class="metadata-label">Updated:</span> ${symbol.updated_at.toLocaleString()}
551
+ </div>
552
+ </div>
553
+
554
+ <div class="signature">
555
+ <strong>Signature:</strong>
556
+ <pre><code>${this.escapeHtml(signature)}</code></pre>
557
+ </div>
558
+
559
+ <div class="dependencies">
560
+ <h2>Dependencies</h2>
561
+ <ul>
562
+ ${depsHtml}
563
+ </ul>
564
+ </div>
565
+
566
+ ${relatedModule ? `
567
+ <div class="related">
568
+ <h2>Related Module</h2>
569
+ <p>
570
+ <a href="#" data-command="5d-database.showModuleDetail" data-args="${this.escapeHtml(JSON.stringify([relatedModule.external_id]))}" style="cursor: pointer;">
571
+ ${this.escapeHtml(relatedModule.label || relatedModule.external_id)}
572
+ </a>
573
+ </p>
574
+ </div>
575
+ ` : ''}
576
+ </body>
577
+ </html>`;
578
+ }
579
+ /**
580
+ * Generates HTML for ADR detail view.
581
+ */
582
+ getAdrHtml(adr, fileMappings, relatedAdrs) {
583
+ const markdown = adr.content_markdown || '*No content available*';
584
+ const filesHtml = fileMappings.length > 0
585
+ ? fileMappings.map(mapping => {
586
+ const fileArgs = this.escapeHtml(JSON.stringify([mapping.file_path]));
587
+ return `<li><a href="#" data-command="5d-database.openSourceFile" data-args="${fileArgs}" style="cursor: pointer;"><code>${this.escapeHtml(mapping.file_path)}</code></a></li>`;
588
+ }).join('\n')
589
+ : '<li><em>No file mappings</em></li>';
590
+ return `<!DOCTYPE html>
591
+ <html lang="en">
592
+ <head>
593
+ <meta charset="UTF-8">
594
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
595
+ <title>ADR-${this.escapeHtml(adr.adr_number)}: ${this.escapeHtml(adr.title)}</title>
596
+ <style>
597
+ body {
598
+ font-family: var(--vscode-font-family);
599
+ padding: 20px;
600
+ color: var(--vscode-foreground);
601
+ background-color: var(--vscode-editor-background);
602
+ }
603
+ h1 {
604
+ color: var(--vscode-textLink-foreground);
605
+ border-bottom: 2px solid var(--vscode-panel-border);
606
+ padding-bottom: 10px;
607
+ }
608
+ .metadata {
609
+ background-color: var(--vscode-editor-inactiveSelectionBackground);
610
+ padding: 15px;
611
+ border-radius: 5px;
612
+ margin-bottom: 20px;
613
+ }
614
+ .metadata-item {
615
+ margin: 5px 0;
616
+ }
617
+ .metadata-label {
618
+ font-weight: bold;
619
+ color: var(--vscode-textLink-foreground);
620
+ }
621
+ .content {
622
+ margin-top: 20px;
623
+ }
624
+ .file-mappings {
625
+ margin-top: 20px;
626
+ }
627
+ .file-mappings ul {
628
+ list-style-type: none;
629
+ padding-left: 0;
630
+ }
631
+ .file-mappings li {
632
+ margin: 5px 0;
633
+ padding: 5px;
634
+ background-color: var(--vscode-editor-inactiveSelectionBackground);
635
+ border-radius: 3px;
636
+ }
637
+ a {
638
+ color: var(--vscode-textLink-foreground);
639
+ text-decoration: underline;
640
+ cursor: pointer;
641
+ }
642
+ a:hover {
643
+ color: var(--vscode-textLink-activeForeground);
644
+ }
645
+ code {
646
+ font-family: var(--vscode-editor-font-family);
647
+ }
648
+ </style>
649
+ <script>
650
+ const vscode = acquireVsCodeApi();
651
+ document.addEventListener('DOMContentLoaded', () => {
652
+ document.querySelectorAll('a[data-command]').forEach(link => {
653
+ link.addEventListener('click', (e) => {
654
+ e.preventDefault();
655
+ const command = link.getAttribute('data-command');
656
+ const argsJson = link.getAttribute('data-args');
657
+ const args = argsJson ? JSON.parse(argsJson) : [];
658
+ vscode.postMessage({
659
+ command: 'executeCommand',
660
+ commandName: command,
661
+ args: args
662
+ });
663
+ });
664
+ });
665
+ });
666
+ </script>
667
+ </head>
668
+ <body>
669
+ <h1>ADR-${this.escapeHtml(adr.adr_number)}: ${this.escapeHtml(adr.title)}</h1>
670
+
671
+ <div class="metadata">
672
+ <div class="metadata-item">
673
+ <span class="metadata-label">ADR Number:</span> ${this.escapeHtml(adr.adr_number)}
674
+ </div>
675
+ <div class="metadata-item">
676
+ <span class="metadata-label">Title:</span> ${this.escapeHtml(adr.title)}
677
+ </div>
678
+ <div class="metadata-item">
679
+ <span class="metadata-label">File Name:</span> ${this.escapeHtml(adr.file_name)}
680
+ </div>
681
+ <div class="metadata-item">
682
+ <span class="metadata-label">Content Hash:</span> <code>${this.escapeHtml(adr.content_hash)}</code>
683
+ </div>
684
+ <div class="metadata-item">
685
+ <span class="metadata-label">Created:</span> ${adr.created_at.toLocaleString()}
686
+ </div>
687
+ <div class="metadata-item">
688
+ <span class="metadata-label">Updated:</span> ${adr.updated_at.toLocaleString()}
689
+ </div>
690
+ </div>
691
+
692
+ <div class="file-mappings">
693
+ <h2>Referenced Files</h2>
694
+ <ul>
695
+ ${filesHtml}
696
+ </ul>
697
+ </div>
698
+
699
+ <div class="content">
700
+ ${this.markdownToHtml(markdown)}
701
+ </div>
702
+ </body>
703
+ </html>`;
704
+ }
705
+ /**
706
+ * Generates HTML for dependency detail view.
707
+ */
708
+ getDependencyHtml(dependency, fromModule, toModule) {
709
+ const fromModuleCommand = fromModule ? '5d-database.showModuleDetail' : '5d-database.openSourceFile';
710
+ const fromModuleArgs = fromModule ? [fromModule.id] : [dependency.from_module];
711
+ const toModuleCommand = toModule ? '5d-database.showModuleDetail' : '5d-database.openSourceFile';
712
+ const toModuleArgs = toModule ? [toModule.id] : [dependency.to_module];
713
+ let symbolsList = '';
714
+ if (dependency.symbols_json) {
715
+ try {
716
+ const symbols = JSON.parse(dependency.symbols_json);
717
+ if (Array.isArray(symbols) && symbols.length > 0) {
718
+ symbolsList = `<div class="metadata-item">
719
+ <span class="metadata-label">Symbols:</span> ${symbols.map(s => `<code>${this.escapeHtml(s)}</code>`).join(', ')}
720
+ </div>`;
721
+ }
722
+ }
723
+ catch {
724
+ // Ignore parse errors
725
+ }
726
+ }
727
+ const flags = [];
728
+ if (dependency.is_type_only)
729
+ flags.push('type-only');
730
+ if (dependency.is_reexport)
731
+ flags.push('reexport');
732
+ const flagsStr = flags.length > 0 ? ` [${flags.join(', ')}]` : '';
733
+ return `<!DOCTYPE html>
734
+ <html lang="en">
735
+ <head>
736
+ <meta charset="UTF-8">
737
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
738
+ <title>Dependency: ${this.escapeHtml(dependency.from_module)} → ${this.escapeHtml(dependency.to_module)}</title>
739
+ <style>
740
+ body {
741
+ font-family: var(--vscode-font-family);
742
+ padding: 20px;
743
+ color: var(--vscode-foreground);
744
+ background-color: var(--vscode-editor-background);
745
+ }
746
+ h1 {
747
+ color: var(--vscode-textLink-foreground);
748
+ border-bottom: 2px solid var(--vscode-panel-border);
749
+ padding-bottom: 10px;
750
+ }
751
+ .metadata {
752
+ background-color: var(--vscode-editor-inactiveSelectionBackground);
753
+ padding: 15px;
754
+ border-radius: 5px;
755
+ margin-bottom: 20px;
756
+ }
757
+ .metadata-item {
758
+ margin: 5px 0;
759
+ }
760
+ .metadata-label {
761
+ font-weight: bold;
762
+ color: var(--vscode-textLink-foreground);
763
+ }
764
+ .related {
765
+ margin-top: 20px;
766
+ }
767
+ .related ul {
768
+ list-style-type: none;
769
+ padding-left: 0;
770
+ }
771
+ .related li {
772
+ margin: 5px 0;
773
+ padding: 5px;
774
+ background-color: var(--vscode-editor-inactiveSelectionBackground);
775
+ border-radius: 3px;
776
+ }
777
+ a {
778
+ color: var(--vscode-textLink-foreground);
779
+ text-decoration: underline;
780
+ cursor: pointer;
781
+ }
782
+ a:hover {
783
+ color: var(--vscode-textLink-activeForeground);
784
+ }
785
+ code {
786
+ font-family: var(--vscode-editor-font-family);
787
+ }
788
+ </style>
789
+ <script>
790
+ const vscode = acquireVsCodeApi();
791
+ document.addEventListener('DOMContentLoaded', () => {
792
+ document.querySelectorAll('a[data-command]').forEach(link => {
793
+ link.addEventListener('click', (e) => {
794
+ e.preventDefault();
795
+ const command = link.getAttribute('data-command');
796
+ const argsJson = link.getAttribute('data-args');
797
+ const args = argsJson ? JSON.parse(argsJson) : [];
798
+ vscode.postMessage({
799
+ command: 'executeCommand',
800
+ commandName: command,
801
+ args: args
802
+ });
803
+ });
804
+ });
805
+ });
806
+ </script>
807
+ </head>
808
+ <body>
809
+ <h1>Dependency: ${this.escapeHtml(dependency.from_module)} → ${this.escapeHtml(dependency.to_module)}</h1>
810
+
811
+ <div class="metadata">
812
+ <div class="metadata-item">
813
+ <span class="metadata-label">From Module:</span>
814
+ <a href="#" data-command="${fromModuleCommand}" data-args="${this.escapeHtml(JSON.stringify(fromModuleArgs))}" style="cursor: pointer;"><code>${this.escapeHtml(dependency.from_module)}</code></a>
815
+ <span style="margin-left: 10px; color: var(--vscode-descriptionForeground);">(click to ${fromModule ? 'view details' : 'open'})</span>
816
+ </div>
817
+ <div class="metadata-item">
818
+ <span class="metadata-label">To Module:</span>
819
+ <a href="#" data-command="${toModuleCommand}" data-args="${this.escapeHtml(JSON.stringify(toModuleArgs))}" style="cursor: pointer;"><code>${this.escapeHtml(dependency.to_module)}</code></a>
820
+ <span style="margin-left: 10px; color: var(--vscode-descriptionForeground);">(click to ${toModule ? 'view details' : 'open'})</span>
821
+ </div>
822
+ <div class="metadata-item">
823
+ <span class="metadata-label">Type:</span> <code>${this.escapeHtml(dependency.dependency_type)}</code>${flagsStr}
824
+ </div>
825
+ ${symbolsList}
826
+ <div class="metadata-item">
827
+ <span class="metadata-label">Content Hash:</span> <code>${this.escapeHtml(dependency.content_hash)}</code>
828
+ </div>
829
+ <div class="metadata-item">
830
+ <span class="metadata-label">Created:</span> ${dependency.created_at.toLocaleString()}
831
+ </div>
832
+ <div class="metadata-item">
833
+ <span class="metadata-label">Updated:</span> ${dependency.updated_at.toLocaleString()}
834
+ </div>
835
+ </div>
836
+
837
+ ${fromModule || toModule ? `
838
+ <div class="related">
839
+ <h2>Related Modules</h2>
840
+ <ul>
841
+ ${fromModule ? `<li><a href="#" data-command="${fromModuleCommand}" data-args="${this.escapeHtml(JSON.stringify(fromModuleArgs))}" style="cursor: pointer;">${this.escapeHtml(dependency.from_module)}</a></li>` : ''}
842
+ ${toModule ? `<li><a href="#" data-command="${toModuleCommand}" data-args="${this.escapeHtml(JSON.stringify(toModuleArgs))}" style="cursor: pointer;">${this.escapeHtml(dependency.to_module)}</a></li>` : ''}
843
+ </ul>
844
+ </div>
845
+ ` : ''}
846
+ </body>
847
+ </html>`;
848
+ }
849
+ /**
850
+ * Generates HTML for change report detail view.
851
+ */
852
+ getChangeHtml(report, symbolChanges, dependencyChanges) {
853
+ const symbolChangesHtml = symbolChanges.length > 0
854
+ ? symbolChanges.map(sc => {
855
+ const fileArgs = this.escapeHtml(JSON.stringify([sc.file_path]));
856
+ const changeTypeBadge = sc.change_type === 'added' ? '🟢' : sc.change_type === 'removed' ? '🔴' : '🟡';
857
+ return `<li>
858
+ ${changeTypeBadge} <strong>${this.escapeHtml(sc.change_type)}</strong>:
859
+ <code>${this.escapeHtml(sc.symbol_name)}</code> (${this.escapeHtml(sc.symbol_kind)})
860
+ in <a href="#" data-command="5d-database.openSourceFile" data-args="${fileArgs}" style="cursor: pointer;"><code>${this.escapeHtml(sc.file_path)}</code></a>
861
+ </li>`;
862
+ }).join('\n')
863
+ : '<li><em>No symbol changes</em></li>';
864
+ const dependencyChangesHtml = dependencyChanges.length > 0
865
+ ? dependencyChanges.map(dc => {
866
+ const fromArgs = this.escapeHtml(JSON.stringify([dc.from_module]));
867
+ const toArgs = this.escapeHtml(JSON.stringify([dc.to_module]));
868
+ const changeTypeBadge = dc.change_type === 'added' ? '🟢' : '🔴';
869
+ return `<li>
870
+ ${changeTypeBadge} <strong>${this.escapeHtml(dc.change_type)}</strong>:
871
+ <a href="#" data-command="5d-database.openSourceFile" data-args="${fromArgs}" style="cursor: pointer;"><code>${this.escapeHtml(dc.from_module)}</code></a>
872
+ → <a href="#" data-command="5d-database.openSourceFile" data-args="${toArgs}" style="cursor: pointer;"><code>${this.escapeHtml(dc.to_module)}</code></a>
873
+ [${this.escapeHtml(dc.dependency_type)}]
874
+ </li>`;
875
+ }).join('\n')
876
+ : '<li><em>No dependency changes</em></li>';
877
+ return `<!DOCTYPE html>
878
+ <html lang="en">
879
+ <head>
880
+ <meta charset="UTF-8">
881
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
882
+ <title>Change Report: ${this.escapeHtml(report.run_type)} - ${report.created_at.toLocaleDateString()}</title>
883
+ <style>
884
+ body {
885
+ font-family: var(--vscode-font-family);
886
+ padding: 20px;
887
+ color: var(--vscode-foreground);
888
+ background-color: var(--vscode-editor-background);
889
+ }
890
+ h1 {
891
+ color: var(--vscode-textLink-foreground);
892
+ border-bottom: 2px solid var(--vscode-panel-border);
893
+ padding-bottom: 10px;
894
+ }
895
+ .metadata {
896
+ background-color: var(--vscode-editor-inactiveSelectionBackground);
897
+ padding: 15px;
898
+ border-radius: 5px;
899
+ margin-bottom: 20px;
900
+ }
901
+ .metadata-item {
902
+ margin: 5px 0;
903
+ }
904
+ .metadata-label {
905
+ font-weight: bold;
906
+ color: var(--vscode-textLink-foreground);
907
+ }
908
+ .changes {
909
+ margin-top: 20px;
910
+ }
911
+ .changes ul {
912
+ list-style-type: none;
913
+ padding-left: 0;
914
+ }
915
+ .changes li {
916
+ margin: 5px 0;
917
+ padding: 8px;
918
+ background-color: var(--vscode-editor-inactiveSelectionBackground);
919
+ border-radius: 3px;
920
+ }
921
+ a {
922
+ color: var(--vscode-textLink-foreground);
923
+ text-decoration: underline;
924
+ cursor: pointer;
925
+ }
926
+ a:hover {
927
+ color: var(--vscode-textLink-activeForeground);
928
+ }
929
+ code {
930
+ font-family: var(--vscode-editor-font-family);
931
+ }
932
+ </style>
933
+ <script>
934
+ const vscode = acquireVsCodeApi();
935
+ document.addEventListener('DOMContentLoaded', () => {
936
+ document.querySelectorAll('a[data-command]').forEach(link => {
937
+ link.addEventListener('click', (e) => {
938
+ e.preventDefault();
939
+ const command = link.getAttribute('data-command');
940
+ const argsJson = link.getAttribute('data-args');
941
+ const args = argsJson ? JSON.parse(argsJson) : [];
942
+ vscode.postMessage({
943
+ command: 'executeCommand',
944
+ commandName: command,
945
+ args: args
946
+ });
947
+ });
948
+ });
949
+ });
950
+ </script>
951
+ </head>
952
+ <body>
953
+ <h1>Change Report: ${this.escapeHtml(report.run_type)} - ${report.created_at.toLocaleDateString()}</h1>
954
+
955
+ <div class="metadata">
956
+ <div class="metadata-item">
957
+ <span class="metadata-label">Run Type:</span> ${this.escapeHtml(report.run_type)}
958
+ </div>
959
+ <div class="metadata-item">
960
+ <span class="metadata-label">Created:</span> ${report.created_at.toLocaleString()}
961
+ </div>
962
+ <div class="metadata-item">
963
+ <span class="metadata-label">Statistics:</span>
964
+ ${report.parsed_files} parsed, ${report.skipped_files} skipped, ${report.total_dependencies} dependencies
965
+ </div>
966
+ ${report.validation_errors > 0 || report.validation_warnings > 0 ? `
967
+ <div class="metadata-item">
968
+ <span class="metadata-label">Validation:</span>
969
+ ${report.validation_errors} errors, ${report.validation_warnings} warnings
970
+ </div>
971
+ ` : ''}
972
+ </div>
973
+
974
+ <div class="changes">
975
+ <h2>Symbol Changes (${symbolChanges.length})</h2>
976
+ <ul>
977
+ ${symbolChangesHtml}
978
+ </ul>
979
+ </div>
980
+
981
+ <div class="changes">
982
+ <h2>Dependency Changes (${dependencyChanges.length})</h2>
983
+ <ul>
984
+ ${dependencyChangesHtml}
985
+ </ul>
986
+ </div>
987
+ </body>
988
+ </html>`;
989
+ }
990
+ /**
991
+ * Escapes HTML special characters.
992
+ */
993
+ escapeHtml(text) {
994
+ return text
995
+ .replace(/&/g, '&amp;')
996
+ .replace(/</g, '&lt;')
997
+ .replace(/>/g, '&gt;')
998
+ .replace(/"/g, '&quot;')
999
+ .replace(/'/g, '&#039;');
1000
+ }
1001
+ /**
1002
+ * Converts markdown to HTML (basic conversion).
1003
+ * For full markdown support, consider using a markdown library.
1004
+ */
1005
+ markdownToHtml(markdown) {
1006
+ // Remove HTML comments first (they're for change tracking, not display)
1007
+ let html = markdown.replace(/<!--[\s\S]*?-->/g, '');
1008
+ // Then escape HTML to prevent XSS
1009
+ html = this.escapeHtml(html);
1010
+ // Headers
1011
+ html = html.replace(/^### (.*$)/gim, '<h3>$1</h3>');
1012
+ html = html.replace(/^## (.*$)/gim, '<h2>$1</h2>');
1013
+ html = html.replace(/^# (.*$)/gim, '<h1>$1</h1>');
1014
+ // Bold
1015
+ html = html.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
1016
+ // Italic
1017
+ html = html.replace(/\*(.*?)\*/g, '<em>$1</em>');
1018
+ // Code blocks
1019
+ html = html.replace(/```([\s\S]*?)```/g, '<pre><code>$1</code></pre>');
1020
+ // Inline code
1021
+ html = html.replace(/`([^`]+)`/g, '<code>$1</code>');
1022
+ // Links
1023
+ html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>');
1024
+ // Line breaks
1025
+ html = html.replace(/\n/g, '<br>');
1026
+ return html;
1027
+ }
1028
+ /**
1029
+ * Disposes all panels.
1030
+ */
1031
+ dispose() {
1032
+ this.panels.forEach(panel => panel.dispose());
1033
+ this.panels.clear();
1034
+ }
1035
+ }
1036
+ exports.DetailViewProvider = DetailViewProvider;
1037
+ //# sourceMappingURL=detail-view-provider.js.map