@n-dx/web 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 (671) hide show
  1. package/LICENSE +96 -0
  2. package/README.md +5 -0
  3. package/build.js +243 -0
  4. package/dist/cli/index.d.ts +8 -0
  5. package/dist/cli/index.js +50 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/landing/index.html +325 -0
  8. package/dist/landing/landing.d.ts +38 -0
  9. package/dist/landing/landing.js +299 -0
  10. package/dist/landing/landing.js.map +1 -0
  11. package/dist/public.d.ts +55 -0
  12. package/dist/public.js +51 -0
  13. package/dist/public.js.map +1 -0
  14. package/dist/schema/features.d.ts +28 -0
  15. package/dist/schema/features.js +9 -0
  16. package/dist/schema/features.js.map +1 -0
  17. package/dist/schema/v1.d.ts +317 -0
  18. package/dist/schema/v1.js +3 -0
  19. package/dist/schema/v1.js.map +1 -0
  20. package/dist/server/aggregation-cache.d.ts +105 -0
  21. package/dist/server/aggregation-cache.js +163 -0
  22. package/dist/server/aggregation-cache.js.map +1 -0
  23. package/dist/server/concurrent-execution-metrics.d.ts +103 -0
  24. package/dist/server/concurrent-execution-metrics.js +253 -0
  25. package/dist/server/concurrent-execution-metrics.js.map +1 -0
  26. package/dist/server/domain-gateway.d.ts +18 -0
  27. package/dist/server/domain-gateway.js +19 -0
  28. package/dist/server/domain-gateway.js.map +1 -0
  29. package/dist/server/incremental-task-usage.d.ts +92 -0
  30. package/dist/server/incremental-task-usage.js +251 -0
  31. package/dist/server/incremental-task-usage.js.map +1 -0
  32. package/dist/server/index.d.ts +39 -0
  33. package/dist/server/index.js +36 -0
  34. package/dist/server/index.js.map +1 -0
  35. package/dist/server/port.d.ts +96 -0
  36. package/dist/server/port.js +134 -0
  37. package/dist/server/port.js.map +1 -0
  38. package/dist/server/pr-markdown-refresh-diagnostics.d.ts +59 -0
  39. package/dist/server/pr-markdown-refresh-diagnostics.js +429 -0
  40. package/dist/server/pr-markdown-refresh-diagnostics.js.map +1 -0
  41. package/dist/server/prd-io.d.ts +40 -0
  42. package/dist/server/prd-io.js +66 -0
  43. package/dist/server/prd-io.js.map +1 -0
  44. package/dist/server/process-memory-tracker.d.ts +79 -0
  45. package/dist/server/process-memory-tracker.js +194 -0
  46. package/dist/server/process-memory-tracker.js.map +1 -0
  47. package/dist/server/register-scheduler.d.ts +53 -0
  48. package/dist/server/register-scheduler.js +36 -0
  49. package/dist/server/register-scheduler.js.map +1 -0
  50. package/dist/server/rex-gateway.d.ts +39 -0
  51. package/dist/server/rex-gateway.js +47 -0
  52. package/dist/server/rex-gateway.js.map +1 -0
  53. package/dist/server/routes-adaptive.d.ts +21 -0
  54. package/dist/server/routes-adaptive.js +659 -0
  55. package/dist/server/routes-adaptive.js.map +1 -0
  56. package/dist/server/routes-config.d.ts +47 -0
  57. package/dist/server/routes-config.js +222 -0
  58. package/dist/server/routes-config.js.map +1 -0
  59. package/dist/server/routes-data.d.ts +14 -0
  60. package/dist/server/routes-data.js +129 -0
  61. package/dist/server/routes-data.js.map +1 -0
  62. package/dist/server/routes-features.d.ts +14 -0
  63. package/dist/server/routes-features.js +245 -0
  64. package/dist/server/routes-features.js.map +1 -0
  65. package/dist/server/routes-hench.d.ts +116 -0
  66. package/dist/server/routes-hench.js +2016 -0
  67. package/dist/server/routes-hench.js.map +1 -0
  68. package/dist/server/routes-integrations.d.ts +23 -0
  69. package/dist/server/routes-integrations.js +277 -0
  70. package/dist/server/routes-integrations.js.map +1 -0
  71. package/dist/server/routes-mcp.d.ts +31 -0
  72. package/dist/server/routes-mcp.js +175 -0
  73. package/dist/server/routes-mcp.js.map +1 -0
  74. package/dist/server/routes-notion.d.ts +23 -0
  75. package/dist/server/routes-notion.js +723 -0
  76. package/dist/server/routes-notion.js.map +1 -0
  77. package/dist/server/routes-project.d.ts +47 -0
  78. package/dist/server/routes-project.js +128 -0
  79. package/dist/server/routes-project.js.map +1 -0
  80. package/dist/server/routes-rex/analysis.d.ts +11 -0
  81. package/dist/server/routes-rex/analysis.js +583 -0
  82. package/dist/server/routes-rex/analysis.js.map +1 -0
  83. package/dist/server/routes-rex/execution.d.ts +37 -0
  84. package/dist/server/routes-rex/execution.js +355 -0
  85. package/dist/server/routes-rex/execution.js.map +1 -0
  86. package/dist/server/routes-rex/health.d.ts +8 -0
  87. package/dist/server/routes-rex/health.js +136 -0
  88. package/dist/server/routes-rex/health.js.map +1 -0
  89. package/dist/server/routes-rex/index.d.ts +35 -0
  90. package/dist/server/routes-rex/index.js +72 -0
  91. package/dist/server/routes-rex/index.js.map +1 -0
  92. package/dist/server/routes-rex/items.d.ts +8 -0
  93. package/dist/server/routes-rex/items.js +359 -0
  94. package/dist/server/routes-rex/items.js.map +1 -0
  95. package/dist/server/routes-rex/prune.d.ts +11 -0
  96. package/dist/server/routes-rex/prune.js +379 -0
  97. package/dist/server/routes-rex/prune.js.map +1 -0
  98. package/dist/server/routes-rex/reads.d.ts +9 -0
  99. package/dist/server/routes-rex/reads.js +119 -0
  100. package/dist/server/routes-rex/reads.js.map +1 -0
  101. package/dist/server/routes-rex/requirements.d.ts +10 -0
  102. package/dist/server/routes-rex/requirements.js +408 -0
  103. package/dist/server/routes-rex/requirements.js.map +1 -0
  104. package/dist/server/routes-rex/shared.d.ts +37 -0
  105. package/dist/server/routes-rex/shared.js +73 -0
  106. package/dist/server/routes-rex/shared.js.map +1 -0
  107. package/dist/server/routes-search.d.ts +26 -0
  108. package/dist/server/routes-search.js +82 -0
  109. package/dist/server/routes-search.js.map +1 -0
  110. package/dist/server/routes-sourcevision.d.ts +18 -0
  111. package/dist/server/routes-sourcevision.js +444 -0
  112. package/dist/server/routes-sourcevision.js.map +1 -0
  113. package/dist/server/routes-static.d.ts +20 -0
  114. package/dist/server/routes-static.js +168 -0
  115. package/dist/server/routes-static.js.map +1 -0
  116. package/dist/server/routes-status.d.ts +58 -0
  117. package/dist/server/routes-status.js +191 -0
  118. package/dist/server/routes-status.js.map +1 -0
  119. package/dist/server/routes-token-usage.d.ts +63 -0
  120. package/dist/server/routes-token-usage.js +720 -0
  121. package/dist/server/routes-token-usage.js.map +1 -0
  122. package/dist/server/routes-validation.d.ts +10 -0
  123. package/dist/server/routes-validation.js +365 -0
  124. package/dist/server/routes-validation.js.map +1 -0
  125. package/dist/server/routes-workflow.d.ts +15 -0
  126. package/dist/server/routes-workflow.js +498 -0
  127. package/dist/server/routes-workflow.js.map +1 -0
  128. package/dist/server/search-index.d.ts +111 -0
  129. package/dist/server/search-index.js +348 -0
  130. package/dist/server/search-index.js.map +1 -0
  131. package/dist/server/shared-types.d.ts +65 -0
  132. package/dist/server/shared-types.js +31 -0
  133. package/dist/server/shared-types.js.map +1 -0
  134. package/dist/server/start.d.ts +68 -0
  135. package/dist/server/start.js +568 -0
  136. package/dist/server/start.js.map +1 -0
  137. package/dist/server/task-usage.d.ts +17 -0
  138. package/dist/server/task-usage.js +20 -0
  139. package/dist/server/task-usage.js.map +1 -0
  140. package/dist/server/types.d.ts +27 -0
  141. package/dist/server/types.js +26 -0
  142. package/dist/server/types.js.map +1 -0
  143. package/dist/server/usage-cleanup-scheduler.d.ts +107 -0
  144. package/dist/server/usage-cleanup-scheduler.js +232 -0
  145. package/dist/server/usage-cleanup-scheduler.js.map +1 -0
  146. package/dist/server/websocket.d.ts +131 -0
  147. package/dist/server/websocket.js +512 -0
  148. package/dist/server/websocket.js.map +1 -0
  149. package/dist/shared/data-files.d.ts +17 -0
  150. package/dist/shared/data-files.js +18 -0
  151. package/dist/shared/data-files.js.map +1 -0
  152. package/dist/shared/index.d.ts +9 -0
  153. package/dist/shared/index.js +9 -0
  154. package/dist/shared/index.js.map +1 -0
  155. package/dist/shared/view-id.d.ts +8 -0
  156. package/dist/shared/view-id.js +9 -0
  157. package/dist/shared/view-id.js.map +1 -0
  158. package/dist/viewer/Hench-F.png +0 -0
  159. package/dist/viewer/Rex-F.png +0 -0
  160. package/dist/viewer/SourceVision-F.png +0 -0
  161. package/dist/viewer/SourceVision.png +0 -0
  162. package/dist/viewer/api.d.ts +19 -0
  163. package/dist/viewer/api.js +17 -0
  164. package/dist/viewer/api.js.map +1 -0
  165. package/dist/viewer/bootstrap.d.ts +13 -0
  166. package/dist/viewer/bootstrap.js +40 -0
  167. package/dist/viewer/bootstrap.js.map +1 -0
  168. package/dist/viewer/components/active-tasks-panel.d.ts +36 -0
  169. package/dist/viewer/components/active-tasks-panel.js +183 -0
  170. package/dist/viewer/components/active-tasks-panel.js.map +1 -0
  171. package/dist/viewer/components/breadcrumb.d.ts +21 -0
  172. package/dist/viewer/components/breadcrumb.js +117 -0
  173. package/dist/viewer/components/breadcrumb.js.map +1 -0
  174. package/dist/viewer/components/concurrency-panel.d.ts +18 -0
  175. package/dist/viewer/components/concurrency-panel.js +175 -0
  176. package/dist/viewer/components/concurrency-panel.js.map +1 -0
  177. package/dist/viewer/components/config-footer.d.ts +11 -0
  178. package/dist/viewer/components/config-footer.js +132 -0
  179. package/dist/viewer/components/config-footer.js.map +1 -0
  180. package/dist/viewer/components/constants.d.ts +10 -0
  181. package/dist/viewer/components/constants.js +11 -0
  182. package/dist/viewer/components/constants.js.map +1 -0
  183. package/dist/viewer/components/copy-link-button.d.ts +30 -0
  184. package/dist/viewer/components/copy-link-button.js +74 -0
  185. package/dist/viewer/components/copy-link-button.js.map +1 -0
  186. package/dist/viewer/components/crash-recovery-banner.d.ts +28 -0
  187. package/dist/viewer/components/crash-recovery-banner.js +47 -0
  188. package/dist/viewer/components/crash-recovery-banner.js.map +1 -0
  189. package/dist/viewer/components/data-display/collapsible-section.d.ts +14 -0
  190. package/dist/viewer/components/data-display/collapsible-section.js +66 -0
  191. package/dist/viewer/components/data-display/collapsible-section.js.map +1 -0
  192. package/dist/viewer/components/data-display/findings-list.d.ts +13 -0
  193. package/dist/viewer/components/data-display/findings-list.js +136 -0
  194. package/dist/viewer/components/data-display/findings-list.js.map +1 -0
  195. package/dist/viewer/components/data-display/health-gauge.d.ts +37 -0
  196. package/dist/viewer/components/data-display/health-gauge.js +62 -0
  197. package/dist/viewer/components/data-display/health-gauge.js.map +1 -0
  198. package/dist/viewer/components/data-display/mini-charts.d.ts +36 -0
  199. package/dist/viewer/components/data-display/mini-charts.js +124 -0
  200. package/dist/viewer/components/data-display/mini-charts.js.map +1 -0
  201. package/dist/viewer/components/data-display/tree-view.d.ts +18 -0
  202. package/dist/viewer/components/data-display/tree-view.js +107 -0
  203. package/dist/viewer/components/data-display/tree-view.js.map +1 -0
  204. package/dist/viewer/components/data-display/zone-map.d.ts +28 -0
  205. package/dist/viewer/components/data-display/zone-map.js +197 -0
  206. package/dist/viewer/components/data-display/zone-map.js.map +1 -0
  207. package/dist/viewer/components/degradation-banner.d.ts +28 -0
  208. package/dist/viewer/components/degradation-banner.js +47 -0
  209. package/dist/viewer/components/degradation-banner.js.map +1 -0
  210. package/dist/viewer/components/detail-panel.d.ts +12 -0
  211. package/dist/viewer/components/detail-panel.js +166 -0
  212. package/dist/viewer/components/detail-panel.js.map +1 -0
  213. package/dist/viewer/components/elapsed-time.d.ts +38 -0
  214. package/dist/viewer/components/elapsed-time.js +35 -0
  215. package/dist/viewer/components/elapsed-time.js.map +1 -0
  216. package/dist/viewer/components/faq.d.ts +12 -0
  217. package/dist/viewer/components/faq.js +237 -0
  218. package/dist/viewer/components/faq.js.map +1 -0
  219. package/dist/viewer/components/favicon.d.ts +30 -0
  220. package/dist/viewer/components/favicon.js +90 -0
  221. package/dist/viewer/components/favicon.js.map +1 -0
  222. package/dist/viewer/components/guide.d.ts +5 -0
  223. package/dist/viewer/components/guide.js +116 -0
  224. package/dist/viewer/components/guide.js.map +1 -0
  225. package/dist/viewer/components/index.d.ts +37 -0
  226. package/dist/viewer/components/index.js +46 -0
  227. package/dist/viewer/components/index.js.map +1 -0
  228. package/dist/viewer/components/logos.d.ts +42 -0
  229. package/dist/viewer/components/logos.js +46 -0
  230. package/dist/viewer/components/logos.js.map +1 -0
  231. package/dist/viewer/components/memory-panel.d.ts +19 -0
  232. package/dist/viewer/components/memory-panel.js +181 -0
  233. package/dist/viewer/components/memory-panel.js.map +1 -0
  234. package/dist/viewer/components/memory-warning.d.ts +23 -0
  235. package/dist/viewer/components/memory-warning.js +42 -0
  236. package/dist/viewer/components/memory-warning.js.map +1 -0
  237. package/dist/viewer/components/notion-schema-wizard.d.ts +16 -0
  238. package/dist/viewer/components/notion-schema-wizard.js +263 -0
  239. package/dist/viewer/components/notion-schema-wizard.js.map +1 -0
  240. package/dist/viewer/components/polling-suspension-indicator.d.ts +24 -0
  241. package/dist/viewer/components/polling-suspension-indicator.js +31 -0
  242. package/dist/viewer/components/polling-suspension-indicator.js.map +1 -0
  243. package/dist/viewer/components/prd-tree/add-item-form.d.ts +31 -0
  244. package/dist/viewer/components/prd-tree/add-item-form.js +231 -0
  245. package/dist/viewer/components/prd-tree/add-item-form.js.map +1 -0
  246. package/dist/viewer/components/prd-tree/analyze-panel.d.ts +13 -0
  247. package/dist/viewer/components/prd-tree/analyze-panel.js +245 -0
  248. package/dist/viewer/components/prd-tree/analyze-panel.js.map +1 -0
  249. package/dist/viewer/components/prd-tree/batch-import-panel.d.ts +34 -0
  250. package/dist/viewer/components/prd-tree/batch-import-panel.js +415 -0
  251. package/dist/viewer/components/prd-tree/batch-import-panel.js.map +1 -0
  252. package/dist/viewer/components/prd-tree/bulk-actions.d.ts +19 -0
  253. package/dist/viewer/components/prd-tree/bulk-actions.js +90 -0
  254. package/dist/viewer/components/prd-tree/bulk-actions.js.map +1 -0
  255. package/dist/viewer/components/prd-tree/compute.d.ts +32 -0
  256. package/dist/viewer/components/prd-tree/compute.js +129 -0
  257. package/dist/viewer/components/prd-tree/compute.js.map +1 -0
  258. package/dist/viewer/components/prd-tree/delete-confirmation.d.ts +23 -0
  259. package/dist/viewer/components/prd-tree/delete-confirmation.js +83 -0
  260. package/dist/viewer/components/prd-tree/delete-confirmation.js.map +1 -0
  261. package/dist/viewer/components/prd-tree/execution-panel.d.ts +14 -0
  262. package/dist/viewer/components/prd-tree/execution-panel.js +291 -0
  263. package/dist/viewer/components/prd-tree/execution-panel.js.map +1 -0
  264. package/dist/viewer/components/prd-tree/facet-filter.d.ts +40 -0
  265. package/dist/viewer/components/prd-tree/facet-filter.js +188 -0
  266. package/dist/viewer/components/prd-tree/facet-filter.js.map +1 -0
  267. package/dist/viewer/components/prd-tree/index.d.ts +24 -0
  268. package/dist/viewer/components/prd-tree/index.js +16 -0
  269. package/dist/viewer/components/prd-tree/index.js.map +1 -0
  270. package/dist/viewer/components/prd-tree/inline-add-form.d.ts +32 -0
  271. package/dist/viewer/components/prd-tree/inline-add-form.js +175 -0
  272. package/dist/viewer/components/prd-tree/inline-add-form.js.map +1 -0
  273. package/dist/viewer/components/prd-tree/inline-status-picker.d.ts +31 -0
  274. package/dist/viewer/components/prd-tree/inline-status-picker.js +110 -0
  275. package/dist/viewer/components/prd-tree/inline-status-picker.js.map +1 -0
  276. package/dist/viewer/components/prd-tree/lazy-children.d.ts +40 -0
  277. package/dist/viewer/components/prd-tree/lazy-children.js +73 -0
  278. package/dist/viewer/components/prd-tree/lazy-children.js.map +1 -0
  279. package/dist/viewer/components/prd-tree/levels.d.ts +31 -0
  280. package/dist/viewer/components/prd-tree/levels.js +72 -0
  281. package/dist/viewer/components/prd-tree/levels.js.map +1 -0
  282. package/dist/viewer/components/prd-tree/listener-lifecycle.d.ts +105 -0
  283. package/dist/viewer/components/prd-tree/listener-lifecycle.js +173 -0
  284. package/dist/viewer/components/prd-tree/listener-lifecycle.js.map +1 -0
  285. package/dist/viewer/components/prd-tree/merge-preview.d.ts +25 -0
  286. package/dist/viewer/components/prd-tree/merge-preview.js +181 -0
  287. package/dist/viewer/components/prd-tree/merge-preview.js.map +1 -0
  288. package/dist/viewer/components/prd-tree/prd-tree.d.ts +91 -0
  289. package/dist/viewer/components/prd-tree/prd-tree.js +565 -0
  290. package/dist/viewer/components/prd-tree/prd-tree.js.map +1 -0
  291. package/dist/viewer/components/prd-tree/proposal-editor.d.ts +44 -0
  292. package/dist/viewer/components/prd-tree/proposal-editor.js +438 -0
  293. package/dist/viewer/components/prd-tree/proposal-editor.js.map +1 -0
  294. package/dist/viewer/components/prd-tree/prune-confirmation.d.ts +25 -0
  295. package/dist/viewer/components/prd-tree/prune-confirmation.js +336 -0
  296. package/dist/viewer/components/prd-tree/prune-confirmation.js.map +1 -0
  297. package/dist/viewer/components/prd-tree/prune-diff-tree.d.ts +39 -0
  298. package/dist/viewer/components/prd-tree/prune-diff-tree.js +319 -0
  299. package/dist/viewer/components/prd-tree/prune-diff-tree.js.map +1 -0
  300. package/dist/viewer/components/prd-tree/reorganize-panel.d.ts +16 -0
  301. package/dist/viewer/components/prd-tree/reorganize-panel.js +213 -0
  302. package/dist/viewer/components/prd-tree/reorganize-panel.js.map +1 -0
  303. package/dist/viewer/components/prd-tree/smart-add-input.d.ts +19 -0
  304. package/dist/viewer/components/prd-tree/smart-add-input.js +383 -0
  305. package/dist/viewer/components/prd-tree/smart-add-input.js.map +1 -0
  306. package/dist/viewer/components/prd-tree/status-filter.d.ts +40 -0
  307. package/dist/viewer/components/prd-tree/status-filter.js +131 -0
  308. package/dist/viewer/components/prd-tree/status-filter.js.map +1 -0
  309. package/dist/viewer/components/prd-tree/task-detail.d.ts +41 -0
  310. package/dist/viewer/components/prd-tree/task-detail.js +1205 -0
  311. package/dist/viewer/components/prd-tree/task-detail.js.map +1 -0
  312. package/dist/viewer/components/prd-tree/task-utilization.d.ts +7 -0
  313. package/dist/viewer/components/prd-tree/task-utilization.js +25 -0
  314. package/dist/viewer/components/prd-tree/task-utilization.js.map +1 -0
  315. package/dist/viewer/components/prd-tree/tree-differ.d.ts +59 -0
  316. package/dist/viewer/components/prd-tree/tree-differ.js +200 -0
  317. package/dist/viewer/components/prd-tree/tree-differ.js.map +1 -0
  318. package/dist/viewer/components/prd-tree/tree-event-delegate.d.ts +70 -0
  319. package/dist/viewer/components/prd-tree/tree-event-delegate.js +176 -0
  320. package/dist/viewer/components/prd-tree/tree-event-delegate.js.map +1 -0
  321. package/dist/viewer/components/prd-tree/tree-search.d.ts +65 -0
  322. package/dist/viewer/components/prd-tree/tree-search.js +178 -0
  323. package/dist/viewer/components/prd-tree/tree-search.js.map +1 -0
  324. package/dist/viewer/components/prd-tree/tree-utils.d.ts +38 -0
  325. package/dist/viewer/components/prd-tree/tree-utils.js +107 -0
  326. package/dist/viewer/components/prd-tree/tree-utils.js.map +1 -0
  327. package/dist/viewer/components/prd-tree/types.d.ts +93 -0
  328. package/dist/viewer/components/prd-tree/types.js +16 -0
  329. package/dist/viewer/components/prd-tree/types.js.map +1 -0
  330. package/dist/viewer/components/prd-tree/virtual-scroll.d.ts +119 -0
  331. package/dist/viewer/components/prd-tree/virtual-scroll.js +169 -0
  332. package/dist/viewer/components/prd-tree/virtual-scroll.js.map +1 -0
  333. package/dist/viewer/components/progressive-loader.d.ts +114 -0
  334. package/dist/viewer/components/progressive-loader.js +225 -0
  335. package/dist/viewer/components/progressive-loader.js.map +1 -0
  336. package/dist/viewer/components/refresh-queue-status.d.ts +20 -0
  337. package/dist/viewer/components/refresh-queue-status.js +65 -0
  338. package/dist/viewer/components/refresh-queue-status.js.map +1 -0
  339. package/dist/viewer/components/rex-task-link.d.ts +50 -0
  340. package/dist/viewer/components/rex-task-link.js +218 -0
  341. package/dist/viewer/components/rex-task-link.js.map +1 -0
  342. package/dist/viewer/components/search-filter.d.ts +20 -0
  343. package/dist/viewer/components/search-filter.js +28 -0
  344. package/dist/viewer/components/search-filter.js.map +1 -0
  345. package/dist/viewer/components/search-overlay.d.ts +31 -0
  346. package/dist/viewer/components/search-overlay.js +472 -0
  347. package/dist/viewer/components/search-overlay.js.map +1 -0
  348. package/dist/viewer/components/sidebar.d.ts +18 -0
  349. package/dist/viewer/components/sidebar.js +357 -0
  350. package/dist/viewer/components/sidebar.js.map +1 -0
  351. package/dist/viewer/components/status-indicators.d.ts +63 -0
  352. package/dist/viewer/components/status-indicators.js +136 -0
  353. package/dist/viewer/components/status-indicators.js.map +1 -0
  354. package/dist/viewer/components/theme-toggle.d.ts +8 -0
  355. package/dist/viewer/components/theme-toggle.js +28 -0
  356. package/dist/viewer/components/theme-toggle.js.map +1 -0
  357. package/dist/viewer/components/throttle-controls.d.ts +18 -0
  358. package/dist/viewer/components/throttle-controls.js +304 -0
  359. package/dist/viewer/components/throttle-controls.js.map +1 -0
  360. package/dist/viewer/components/ws-health-panel.d.ts +18 -0
  361. package/dist/viewer/components/ws-health-panel.js +250 -0
  362. package/dist/viewer/components/ws-health-panel.js.map +1 -0
  363. package/dist/viewer/components/zone-slideout.d.ts +17 -0
  364. package/dist/viewer/components/zone-slideout.js +162 -0
  365. package/dist/viewer/components/zone-slideout.js.map +1 -0
  366. package/dist/viewer/crash/crash-detector.d.ts +69 -0
  367. package/dist/viewer/crash/crash-detector.js +239 -0
  368. package/dist/viewer/crash/crash-detector.js.map +1 -0
  369. package/dist/viewer/crash/index.d.ts +7 -0
  370. package/dist/viewer/crash/index.js +8 -0
  371. package/dist/viewer/crash/index.js.map +1 -0
  372. package/dist/viewer/deployed-mode.d.ts +37 -0
  373. package/dist/viewer/deployed-mode.js +94 -0
  374. package/dist/viewer/deployed-mode.js.map +1 -0
  375. package/dist/viewer/external.d.ts +17 -0
  376. package/dist/viewer/external.js +17 -0
  377. package/dist/viewer/external.js.map +1 -0
  378. package/dist/viewer/graph/index.d.ts +9 -0
  379. package/dist/viewer/graph/index.js +12 -0
  380. package/dist/viewer/graph/index.js.map +1 -0
  381. package/dist/viewer/graph/physics.d.ts +96 -0
  382. package/dist/viewer/graph/physics.js +366 -0
  383. package/dist/viewer/graph/physics.js.map +1 -0
  384. package/dist/viewer/graph/renderer.d.ts +184 -0
  385. package/dist/viewer/graph/renderer.js +1438 -0
  386. package/dist/viewer/graph/renderer.js.map +1 -0
  387. package/dist/viewer/hooks/index.d.ts +27 -0
  388. package/dist/viewer/hooks/index.js +28 -0
  389. package/dist/viewer/hooks/index.js.map +1 -0
  390. package/dist/viewer/hooks/use-app-data.d.ts +31 -0
  391. package/dist/viewer/hooks/use-app-data.js +152 -0
  392. package/dist/viewer/hooks/use-app-data.js.map +1 -0
  393. package/dist/viewer/hooks/use-crash-recovery.d.ts +50 -0
  394. package/dist/viewer/hooks/use-crash-recovery.js +76 -0
  395. package/dist/viewer/hooks/use-crash-recovery.js.map +1 -0
  396. package/dist/viewer/hooks/use-delete-actions.d.ts +48 -0
  397. package/dist/viewer/hooks/use-delete-actions.js +103 -0
  398. package/dist/viewer/hooks/use-delete-actions.js.map +1 -0
  399. package/dist/viewer/hooks/use-dom-performance-monitor.d.ts +68 -0
  400. package/dist/viewer/hooks/use-dom-performance-monitor.js +71 -0
  401. package/dist/viewer/hooks/use-dom-performance-monitor.js.map +1 -0
  402. package/dist/viewer/hooks/use-facet-state.d.ts +32 -0
  403. package/dist/viewer/hooks/use-facet-state.js +119 -0
  404. package/dist/viewer/hooks/use-facet-state.js.map +1 -0
  405. package/dist/viewer/hooks/use-feature-toggle.d.ts +18 -0
  406. package/dist/viewer/hooks/use-feature-toggle.js +57 -0
  407. package/dist/viewer/hooks/use-feature-toggle.js.map +1 -0
  408. package/dist/viewer/hooks/use-file-edges.d.ts +23 -0
  409. package/dist/viewer/hooks/use-file-edges.js +221 -0
  410. package/dist/viewer/hooks/use-file-edges.js.map +1 -0
  411. package/dist/viewer/hooks/use-graceful-degradation.d.ts +30 -0
  412. package/dist/viewer/hooks/use-graceful-degradation.js +45 -0
  413. package/dist/viewer/hooks/use-graceful-degradation.js.map +1 -0
  414. package/dist/viewer/hooks/use-item-selection.d.ts +49 -0
  415. package/dist/viewer/hooks/use-item-selection.js +117 -0
  416. package/dist/viewer/hooks/use-item-selection.js.map +1 -0
  417. package/dist/viewer/hooks/use-memory-monitor.d.ts +39 -0
  418. package/dist/viewer/hooks/use-memory-monitor.js +73 -0
  419. package/dist/viewer/hooks/use-memory-monitor.js.map +1 -0
  420. package/dist/viewer/hooks/use-pan-zoom.d.ts +33 -0
  421. package/dist/viewer/hooks/use-pan-zoom.js +110 -0
  422. package/dist/viewer/hooks/use-pan-zoom.js.map +1 -0
  423. package/dist/viewer/hooks/use-persistent-filter.d.ts +24 -0
  424. package/dist/viewer/hooks/use-persistent-filter.js +37 -0
  425. package/dist/viewer/hooks/use-persistent-filter.js.map +1 -0
  426. package/dist/viewer/hooks/use-polling-suspension.d.ts +32 -0
  427. package/dist/viewer/hooks/use-polling-suspension.js +41 -0
  428. package/dist/viewer/hooks/use-polling-suspension.js.map +1 -0
  429. package/dist/viewer/hooks/use-polling.d.ts +39 -0
  430. package/dist/viewer/hooks/use-polling.js +55 -0
  431. package/dist/viewer/hooks/use-polling.js.map +1 -0
  432. package/dist/viewer/hooks/use-prd-actions.d.ts +126 -0
  433. package/dist/viewer/hooks/use-prd-actions.js +250 -0
  434. package/dist/viewer/hooks/use-prd-actions.js.map +1 -0
  435. package/dist/viewer/hooks/use-prd-data.d.ts +45 -0
  436. package/dist/viewer/hooks/use-prd-data.js +159 -0
  437. package/dist/viewer/hooks/use-prd-data.js.map +1 -0
  438. package/dist/viewer/hooks/use-prd-deep-link.d.ts +45 -0
  439. package/dist/viewer/hooks/use-prd-deep-link.js +60 -0
  440. package/dist/viewer/hooks/use-prd-deep-link.js.map +1 -0
  441. package/dist/viewer/hooks/use-prd-websocket.d.ts +47 -0
  442. package/dist/viewer/hooks/use-prd-websocket.js +139 -0
  443. package/dist/viewer/hooks/use-prd-websocket.js.map +1 -0
  444. package/dist/viewer/hooks/use-project-metadata.d.ts +25 -0
  445. package/dist/viewer/hooks/use-project-metadata.js +55 -0
  446. package/dist/viewer/hooks/use-project-metadata.js.map +1 -0
  447. package/dist/viewer/hooks/use-project-status.d.ts +60 -0
  448. package/dist/viewer/hooks/use-project-status.js +133 -0
  449. package/dist/viewer/hooks/use-project-status.js.map +1 -0
  450. package/dist/viewer/hooks/use-refresh-throttle.d.ts +45 -0
  451. package/dist/viewer/hooks/use-refresh-throttle.js +52 -0
  452. package/dist/viewer/hooks/use-refresh-throttle.js.map +1 -0
  453. package/dist/viewer/hooks/use-route-state.d.ts +18 -0
  454. package/dist/viewer/hooks/use-route-state.js +115 -0
  455. package/dist/viewer/hooks/use-route-state.js.map +1 -0
  456. package/dist/viewer/hooks/use-subzone-edges.d.ts +21 -0
  457. package/dist/viewer/hooks/use-subzone-edges.js +147 -0
  458. package/dist/viewer/hooks/use-subzone-edges.js.map +1 -0
  459. package/dist/viewer/hooks/use-tab-visibility.d.ts +31 -0
  460. package/dist/viewer/hooks/use-tab-visibility.js +43 -0
  461. package/dist/viewer/hooks/use-tab-visibility.js.map +1 -0
  462. package/dist/viewer/hooks/use-tick.d.ts +43 -0
  463. package/dist/viewer/hooks/use-tick.js +76 -0
  464. package/dist/viewer/hooks/use-tick.js.map +1 -0
  465. package/dist/viewer/hooks/use-toast.d.ts +24 -0
  466. package/dist/viewer/hooks/use-toast.js +26 -0
  467. package/dist/viewer/hooks/use-toast.js.map +1 -0
  468. package/dist/viewer/hooks/use-zone-drag.d.ts +30 -0
  469. package/dist/viewer/hooks/use-zone-drag.js +60 -0
  470. package/dist/viewer/hooks/use-zone-drag.js.map +1 -0
  471. package/dist/viewer/index.html +36 -0
  472. package/dist/viewer/loader.d.ts +33 -0
  473. package/dist/viewer/loader.js +195 -0
  474. package/dist/viewer/loader.js.map +1 -0
  475. package/dist/viewer/main.d.ts +1 -0
  476. package/dist/viewer/main.js +121 -0
  477. package/dist/viewer/main.js.map +1 -0
  478. package/dist/viewer/messaging/call-rate-limiter.d.ts +50 -0
  479. package/dist/viewer/messaging/call-rate-limiter.js +103 -0
  480. package/dist/viewer/messaging/call-rate-limiter.js.map +1 -0
  481. package/dist/viewer/messaging/fetch-pipeline.d.ts +58 -0
  482. package/dist/viewer/messaging/fetch-pipeline.js +58 -0
  483. package/dist/viewer/messaging/fetch-pipeline.js.map +1 -0
  484. package/dist/viewer/messaging/index.d.ts +43 -0
  485. package/dist/viewer/messaging/index.js +46 -0
  486. package/dist/viewer/messaging/index.js.map +1 -0
  487. package/dist/viewer/messaging/message-coalescer.d.ts +96 -0
  488. package/dist/viewer/messaging/message-coalescer.js +121 -0
  489. package/dist/viewer/messaging/message-coalescer.js.map +1 -0
  490. package/dist/viewer/messaging/message-throttle.d.ts +95 -0
  491. package/dist/viewer/messaging/message-throttle.js +147 -0
  492. package/dist/viewer/messaging/message-throttle.js.map +1 -0
  493. package/dist/viewer/messaging/request-dedup.d.ts +43 -0
  494. package/dist/viewer/messaging/request-dedup.js +55 -0
  495. package/dist/viewer/messaging/request-dedup.js.map +1 -0
  496. package/dist/viewer/messaging/ws-pipeline.d.ts +85 -0
  497. package/dist/viewer/messaging/ws-pipeline.js +68 -0
  498. package/dist/viewer/messaging/ws-pipeline.js.map +1 -0
  499. package/dist/viewer/n-dx.png +0 -0
  500. package/dist/viewer/performance/dom-performance-monitor.d.ts +157 -0
  501. package/dist/viewer/performance/dom-performance-monitor.js +341 -0
  502. package/dist/viewer/performance/dom-performance-monitor.js.map +1 -0
  503. package/dist/viewer/performance/dom-update-gate.d.ts +122 -0
  504. package/dist/viewer/performance/dom-update-gate.js +229 -0
  505. package/dist/viewer/performance/dom-update-gate.js.map +1 -0
  506. package/dist/viewer/performance/graceful-degradation.d.ts +73 -0
  507. package/dist/viewer/performance/graceful-degradation.js +152 -0
  508. package/dist/viewer/performance/graceful-degradation.js.map +1 -0
  509. package/dist/viewer/performance/index.d.ts +14 -0
  510. package/dist/viewer/performance/index.js +20 -0
  511. package/dist/viewer/performance/index.js.map +1 -0
  512. package/dist/viewer/performance/memory-monitor.d.ts +78 -0
  513. package/dist/viewer/performance/memory-monitor.js +218 -0
  514. package/dist/viewer/performance/memory-monitor.js.map +1 -0
  515. package/dist/viewer/performance/refresh-throttle.d.ts +90 -0
  516. package/dist/viewer/performance/refresh-throttle.js +266 -0
  517. package/dist/viewer/performance/refresh-throttle.js.map +1 -0
  518. package/dist/viewer/performance/response-buffer-gate.d.ts +108 -0
  519. package/dist/viewer/performance/response-buffer-gate.js +170 -0
  520. package/dist/viewer/performance/response-buffer-gate.js.map +1 -0
  521. package/dist/viewer/performance/update-batcher.d.ts +79 -0
  522. package/dist/viewer/performance/update-batcher.js +119 -0
  523. package/dist/viewer/performance/update-batcher.js.map +1 -0
  524. package/dist/viewer/polling/batched-tick-dispatcher.d.ts +83 -0
  525. package/dist/viewer/polling/batched-tick-dispatcher.js +183 -0
  526. package/dist/viewer/polling/batched-tick-dispatcher.js.map +1 -0
  527. package/dist/viewer/polling/index.d.ts +13 -0
  528. package/dist/viewer/polling/index.js +16 -0
  529. package/dist/viewer/polling/index.js.map +1 -0
  530. package/dist/viewer/polling/polling-manager.d.ts +82 -0
  531. package/dist/viewer/polling/polling-manager.js +254 -0
  532. package/dist/viewer/polling/polling-manager.js.map +1 -0
  533. package/dist/viewer/polling/polling-restart.d.ts +45 -0
  534. package/dist/viewer/polling/polling-restart.js +98 -0
  535. package/dist/viewer/polling/polling-restart.js.map +1 -0
  536. package/dist/viewer/polling/polling-state.d.ts +182 -0
  537. package/dist/viewer/polling/polling-state.js +306 -0
  538. package/dist/viewer/polling/polling-state.js.map +1 -0
  539. package/dist/viewer/polling/tab-visibility.d.ts +112 -0
  540. package/dist/viewer/polling/tab-visibility.js +276 -0
  541. package/dist/viewer/polling/tab-visibility.js.map +1 -0
  542. package/dist/viewer/polling/tick-timer.d.ts +70 -0
  543. package/dist/viewer/polling/tick-timer.js +168 -0
  544. package/dist/viewer/polling/tick-timer.js.map +1 -0
  545. package/dist/viewer/polling/tick-visibility-gate.d.ts +92 -0
  546. package/dist/viewer/polling/tick-visibility-gate.js +146 -0
  547. package/dist/viewer/polling/tick-visibility-gate.js.map +1 -0
  548. package/dist/viewer/route-state.d.ts +8 -0
  549. package/dist/viewer/route-state.js +77 -0
  550. package/dist/viewer/route-state.js.map +1 -0
  551. package/dist/viewer/schema-compat.d.ts +17 -0
  552. package/dist/viewer/schema-compat.js +49 -0
  553. package/dist/viewer/schema-compat.js.map +1 -0
  554. package/dist/viewer/types.d.ts +66 -0
  555. package/dist/viewer/types.js +2 -0
  556. package/dist/viewer/types.js.map +1 -0
  557. package/dist/viewer/usage/constants.d.ts +14 -0
  558. package/dist/viewer/usage/constants.js +14 -0
  559. package/dist/viewer/usage/constants.js.map +1 -0
  560. package/dist/viewer/usage/index.d.ts +7 -0
  561. package/dist/viewer/usage/index.js +8 -0
  562. package/dist/viewer/usage/index.js.map +1 -0
  563. package/dist/viewer/utils.d.ts +25 -0
  564. package/dist/viewer/utils.js +48 -0
  565. package/dist/viewer/utils.js.map +1 -0
  566. package/dist/viewer/validate.d.ts +23 -0
  567. package/dist/viewer/validate.js +275 -0
  568. package/dist/viewer/validate.js.map +1 -0
  569. package/dist/viewer/views/analysis.d.ts +10 -0
  570. package/dist/viewer/views/analysis.js +109 -0
  571. package/dist/viewer/views/analysis.js.map +1 -0
  572. package/dist/viewer/views/architecture.d.ts +10 -0
  573. package/dist/viewer/views/architecture.js +44 -0
  574. package/dist/viewer/views/architecture.js.map +1 -0
  575. package/dist/viewer/views/domain-hench.d.ts +13 -0
  576. package/dist/viewer/views/domain-hench.js +14 -0
  577. package/dist/viewer/views/domain-hench.js.map +1 -0
  578. package/dist/viewer/views/domain-rex.d.ts +17 -0
  579. package/dist/viewer/views/domain-rex.js +18 -0
  580. package/dist/viewer/views/domain-rex.js.map +1 -0
  581. package/dist/viewer/views/domain-settings.d.ts +12 -0
  582. package/dist/viewer/views/domain-settings.js +13 -0
  583. package/dist/viewer/views/domain-settings.js.map +1 -0
  584. package/dist/viewer/views/domain-sourcevision.d.ts +20 -0
  585. package/dist/viewer/views/domain-sourcevision.js +21 -0
  586. package/dist/viewer/views/domain-sourcevision.js.map +1 -0
  587. package/dist/viewer/views/enrichment-thresholds.d.ts +11 -0
  588. package/dist/viewer/views/enrichment-thresholds.js +12 -0
  589. package/dist/viewer/views/enrichment-thresholds.js.map +1 -0
  590. package/dist/viewer/views/feature-toggles.d.ts +13 -0
  591. package/dist/viewer/views/feature-toggles.js +185 -0
  592. package/dist/viewer/views/feature-toggles.js.map +1 -0
  593. package/dist/viewer/views/files.d.ts +13 -0
  594. package/dist/viewer/views/files.js +174 -0
  595. package/dist/viewer/views/files.js.map +1 -0
  596. package/dist/viewer/views/graph.d.ts +12 -0
  597. package/dist/viewer/views/graph.js +316 -0
  598. package/dist/viewer/views/graph.js.map +1 -0
  599. package/dist/viewer/views/hench-config.d.ts +39 -0
  600. package/dist/viewer/views/hench-config.js +473 -0
  601. package/dist/viewer/views/hench-config.js.map +1 -0
  602. package/dist/viewer/views/hench-runs.d.ts +19 -0
  603. package/dist/viewer/views/hench-runs.js +460 -0
  604. package/dist/viewer/views/hench-runs.js.map +1 -0
  605. package/dist/viewer/views/hench-templates.d.ts +17 -0
  606. package/dist/viewer/views/hench-templates.js +262 -0
  607. package/dist/viewer/views/hench-templates.js.map +1 -0
  608. package/dist/viewer/views/integration-config.d.ts +73 -0
  609. package/dist/viewer/views/integration-config.js +524 -0
  610. package/dist/viewer/views/integration-config.js.map +1 -0
  611. package/dist/viewer/views/notion-config.d.ts +16 -0
  612. package/dist/viewer/views/notion-config.js +357 -0
  613. package/dist/viewer/views/notion-config.js.map +1 -0
  614. package/dist/viewer/views/overview.d.ts +10 -0
  615. package/dist/viewer/views/overview.js +187 -0
  616. package/dist/viewer/views/overview.js.map +1 -0
  617. package/dist/viewer/views/pr-markdown.d.ts +3 -0
  618. package/dist/viewer/views/pr-markdown.js +350 -0
  619. package/dist/viewer/views/pr-markdown.js.map +1 -0
  620. package/dist/viewer/views/prd.d.ts +34 -0
  621. package/dist/viewer/views/prd.js +257 -0
  622. package/dist/viewer/views/prd.js.map +1 -0
  623. package/dist/viewer/views/problems.d.ts +8 -0
  624. package/dist/viewer/views/problems.js +50 -0
  625. package/dist/viewer/views/problems.js.map +1 -0
  626. package/dist/viewer/views/rex-dashboard.d.ts +14 -0
  627. package/dist/viewer/views/rex-dashboard.js +334 -0
  628. package/dist/viewer/views/rex-dashboard.js.map +1 -0
  629. package/dist/viewer/views/routes.d.ts +8 -0
  630. package/dist/viewer/views/routes.js +216 -0
  631. package/dist/viewer/views/routes.js.map +1 -0
  632. package/dist/viewer/views/sourcevision-tabs.d.ts +18 -0
  633. package/dist/viewer/views/sourcevision-tabs.js +14 -0
  634. package/dist/viewer/views/sourcevision-tabs.js.map +1 -0
  635. package/dist/viewer/views/suggestions.d.ts +8 -0
  636. package/dist/viewer/views/suggestions.js +36 -0
  637. package/dist/viewer/views/suggestions.js.map +1 -0
  638. package/dist/viewer/views/task-audit.d.ts +18 -0
  639. package/dist/viewer/views/task-audit.js +413 -0
  640. package/dist/viewer/views/task-audit.js.map +1 -0
  641. package/dist/viewer/views/token-usage.d.ts +10 -0
  642. package/dist/viewer/views/token-usage.js +410 -0
  643. package/dist/viewer/views/token-usage.js.map +1 -0
  644. package/dist/viewer/views/validation.d.ts +11 -0
  645. package/dist/viewer/views/validation.js +475 -0
  646. package/dist/viewer/views/validation.js.map +1 -0
  647. package/dist/viewer/views/view-registry.d.ts +27 -0
  648. package/dist/viewer/views/view-registry.js +70 -0
  649. package/dist/viewer/views/view-registry.js.map +1 -0
  650. package/dist/viewer/views/workflow-optimization.d.ts +12 -0
  651. package/dist/viewer/views/workflow-optimization.js +311 -0
  652. package/dist/viewer/views/workflow-optimization.js.map +1 -0
  653. package/dist/viewer/views/zone-types.d.ts +69 -0
  654. package/dist/viewer/views/zone-types.js +5 -0
  655. package/dist/viewer/views/zone-types.js.map +1 -0
  656. package/dist/viewer/views/zones.d.ts +50 -0
  657. package/dist/viewer/views/zones.js +1438 -0
  658. package/dist/viewer/views/zones.js.map +1 -0
  659. package/dist/viewer/visualization/colors.d.ts +16 -0
  660. package/dist/viewer/visualization/colors.js +31 -0
  661. package/dist/viewer/visualization/colors.js.map +1 -0
  662. package/dist/viewer/visualization/flow.d.ts +54 -0
  663. package/dist/viewer/visualization/flow.js +123 -0
  664. package/dist/viewer/visualization/flow.js.map +1 -0
  665. package/dist/viewer/visualization/index.d.ts +34 -0
  666. package/dist/viewer/visualization/index.js +40 -0
  667. package/dist/viewer/visualization/index.js.map +1 -0
  668. package/dist/viewer/visualization/metrics.d.ts +8 -0
  669. package/dist/viewer/visualization/metrics.js +16 -0
  670. package/dist/viewer/visualization/metrics.js.map +1 -0
  671. package/package.json +54 -0
@@ -0,0 +1,512 @@
1
+ /**
2
+ * WebSocket support for real-time updates.
3
+ *
4
+ * Implements the WebSocket protocol (RFC 6455) using only Node.js built-in
5
+ * modules — no external dependencies required.
6
+ *
7
+ * Supports:
8
+ * - Broadcasting PRD item changes to connected clients
9
+ * - Broadcasting file-change events (sourcevision data updates)
10
+ * - Immediate disconnect detection via socket events + pre-broadcast pruning
11
+ * - Ping/pong keepalive (reduced interval safety net)
12
+ * - Connection health tracking and lifecycle metrics
13
+ */
14
+ import { createHash } from "node:crypto";
15
+ // ── Health tracker ─────────────────────────────────────────────────────────
16
+ /** Maximum number of recent cleanup events to retain for rolling stats. */
17
+ const MAX_CLEANUP_HISTORY = 500;
18
+ /** Window (ms) for "recent cleanups" count. */
19
+ const RECENT_WINDOW_MS = 60_000;
20
+ /** Window (ms) for average connection duration calculation. */
21
+ const DURATION_WINDOW_MS = 5 * 60_000;
22
+ /**
23
+ * WebSocket connection health tracker — records connection lifecycle events,
24
+ * cleanup metrics, and resource usage for dashboard monitoring.
25
+ *
26
+ * Instruments the WebSocket manager to collect:
27
+ * - Active vs total (historical peak) connection counts
28
+ * - Cleanup events: successful removals, reasons, timing
29
+ * - Broadcast statistics: total broadcasts, failed writes
30
+ * - Connection duration tracking
31
+ *
32
+ * Designed as a singleton that accumulates metrics over the server lifetime.
33
+ * Provides a snapshot API consumed by the REST endpoint and WS broadcast.
34
+ */
35
+ export class WsHealthTracker {
36
+ startedAt = Date.now();
37
+ // Connection tracking
38
+ activeConnectionCount = 0;
39
+ peakConnectionCount = 0;
40
+ totalAccepted = 0;
41
+ totalRemoved = 0;
42
+ // Per-connection timestamps for duration tracking
43
+ connectionStartTimes = new Map();
44
+ connectionIdCounter = 0;
45
+ // Cleanup history (ring buffer)
46
+ cleanupHistory = [];
47
+ cleanupsByReason = {
48
+ close: 0,
49
+ error: 0,
50
+ end: 0,
51
+ ping_timeout: 0,
52
+ prune: 0,
53
+ shutdown: 0,
54
+ write_fail: 0,
55
+ };
56
+ // Broadcast tracking
57
+ totalBroadcasts = 0;
58
+ totalWriteFailures = 0;
59
+ // Cleanup timing: track ms from connection start to cleanup
60
+ // for "cleanup latency" (how quickly we detect dead connections)
61
+ cleanupLatencySum = 0;
62
+ cleanupLatencyCount = 0;
63
+ /**
64
+ * Record a new connection being accepted.
65
+ * Returns a connection ID to pass to `recordDisconnect()`.
66
+ */
67
+ recordConnect() {
68
+ const id = String(++this.connectionIdCounter);
69
+ this.connectionStartTimes.set(id, Date.now());
70
+ this.activeConnectionCount++;
71
+ this.totalAccepted++;
72
+ if (this.activeConnectionCount > this.peakConnectionCount) {
73
+ this.peakConnectionCount = this.activeConnectionCount;
74
+ }
75
+ return id;
76
+ }
77
+ /**
78
+ * Record a connection being removed.
79
+ */
80
+ recordDisconnect(connectionId, reason) {
81
+ const startTime = this.connectionStartTimes.get(connectionId);
82
+ if (!startTime)
83
+ return; // Already recorded or unknown
84
+ this.connectionStartTimes.delete(connectionId);
85
+ const now = Date.now();
86
+ const durationMs = now - startTime;
87
+ this.activeConnectionCount = Math.max(0, this.activeConnectionCount - 1);
88
+ this.totalRemoved++;
89
+ this.cleanupsByReason[reason]++;
90
+ const event = {
91
+ reason,
92
+ timestamp: now,
93
+ connectionDurationMs: durationMs,
94
+ };
95
+ // Ring buffer for cleanup history
96
+ if (this.cleanupHistory.length >= MAX_CLEANUP_HISTORY) {
97
+ this.cleanupHistory.shift();
98
+ }
99
+ this.cleanupHistory.push(event);
100
+ // Accumulate cleanup latency for averaging
101
+ this.cleanupLatencySum += durationMs;
102
+ this.cleanupLatencyCount++;
103
+ }
104
+ /** Record a broadcast attempt. */
105
+ recordBroadcast() {
106
+ this.totalBroadcasts++;
107
+ }
108
+ /** Record a failed write during broadcast. */
109
+ recordBroadcastWriteFailure() {
110
+ this.totalWriteFailures++;
111
+ }
112
+ /**
113
+ * Sync the active connection count with the actual client set size.
114
+ * Called periodically to correct any drift from missed events.
115
+ */
116
+ syncActiveCount(actualCount) {
117
+ this.activeConnectionCount = actualCount;
118
+ if (actualCount > this.peakConnectionCount) {
119
+ this.peakConnectionCount = actualCount;
120
+ }
121
+ }
122
+ /** Get a snapshot of current health metrics. */
123
+ getSnapshot() {
124
+ const now = Date.now();
125
+ // Recent cleanups (last 60s)
126
+ const recentCutoff = now - RECENT_WINDOW_MS;
127
+ const recentCleanups = this.cleanupHistory.filter((e) => e.timestamp >= recentCutoff).length;
128
+ // Average connection duration for connections closed in last 5 min
129
+ const durationCutoff = now - DURATION_WINDOW_MS;
130
+ const recentDurations = this.cleanupHistory
131
+ .filter((e) => e.timestamp >= durationCutoff)
132
+ .map((e) => e.connectionDurationMs);
133
+ const avgConnectionDurationMs = recentDurations.length > 0
134
+ ? Math.round(recentDurations.reduce((a, b) => a + b, 0) / recentDurations.length)
135
+ : 0;
136
+ // Cleanup success rate: event-driven cleanups (close/error/end) vs
137
+ // safety-net cleanups (ping_timeout/prune/write_fail)
138
+ const totalCleanups = this.totalRemoved;
139
+ const eventDrivenCleanups = this.cleanupsByReason.close +
140
+ this.cleanupsByReason.error +
141
+ this.cleanupsByReason.end +
142
+ this.cleanupsByReason.shutdown;
143
+ const cleanupSuccessRate = totalCleanups > 0 ? eventDrivenCleanups / totalCleanups : 1;
144
+ // Average cleanup latency
145
+ const avgCleanupLatencyMs = this.cleanupLatencyCount > 0
146
+ ? Math.round(this.cleanupLatencySum / this.cleanupLatencyCount)
147
+ : 0;
148
+ // Health level
149
+ const health = this.computeHealth(cleanupSuccessRate, recentCleanups);
150
+ return {
151
+ activeConnections: this.activeConnectionCount,
152
+ peakConnections: this.peakConnectionCount,
153
+ totalConnectionsAccepted: this.totalAccepted,
154
+ totalConnectionsRemoved: this.totalRemoved,
155
+ cleanupsByReason: { ...this.cleanupsByReason },
156
+ recentCleanups,
157
+ avgConnectionDurationMs,
158
+ totalBroadcasts: this.totalBroadcasts,
159
+ totalBroadcastWriteFailures: this.totalWriteFailures,
160
+ cleanupSuccessRate: Math.round(cleanupSuccessRate * 1000) / 1000,
161
+ avgCleanupLatencyMs,
162
+ health,
163
+ uptimeMs: now - this.startedAt,
164
+ timestamp: new Date().toISOString(),
165
+ };
166
+ }
167
+ /** Reset all counters (for testing). */
168
+ reset() {
169
+ this.activeConnectionCount = 0;
170
+ this.peakConnectionCount = 0;
171
+ this.totalAccepted = 0;
172
+ this.totalRemoved = 0;
173
+ this.connectionStartTimes.clear();
174
+ this.connectionIdCounter = 0;
175
+ this.cleanupHistory.length = 0;
176
+ this.cleanupsByReason.close = 0;
177
+ this.cleanupsByReason.error = 0;
178
+ this.cleanupsByReason.end = 0;
179
+ this.cleanupsByReason.ping_timeout = 0;
180
+ this.cleanupsByReason.prune = 0;
181
+ this.cleanupsByReason.shutdown = 0;
182
+ this.cleanupsByReason.write_fail = 0;
183
+ this.totalBroadcasts = 0;
184
+ this.totalWriteFailures = 0;
185
+ this.cleanupLatencySum = 0;
186
+ this.cleanupLatencyCount = 0;
187
+ }
188
+ computeHealth(cleanupSuccessRate, recentCleanups) {
189
+ // Unhealthy: high rate of safety-net cleanups (>30% are prune/timeout/write_fail)
190
+ // or very high cleanup churn (>50 cleanups per minute)
191
+ if (cleanupSuccessRate < 0.7 || recentCleanups > 50) {
192
+ return "unhealthy";
193
+ }
194
+ // Degraded: moderate safety-net usage or moderate churn
195
+ if (cleanupSuccessRate < 0.9 || recentCleanups > 20) {
196
+ return "degraded";
197
+ }
198
+ return "healthy";
199
+ }
200
+ }
201
+ /**
202
+ * Keepalive ping interval (ms). Reduced from 30 s for faster detection
203
+ * of silently dropped connections. Primary disconnect detection is
204
+ * event-driven (close/error/end handlers); pings are a safety net for
205
+ * connections that go silent without a TCP FIN/RST.
206
+ */
207
+ export const PING_INTERVAL_MS = 5_000;
208
+ const WS_MAGIC = "258EAFA5-E914-47DA-95CA-5AB9DC65B11D";
209
+ /** Compute the Sec-WebSocket-Accept header value. */
210
+ function computeAcceptKey(key) {
211
+ return createHash("sha1").update(key + WS_MAGIC).digest("base64");
212
+ }
213
+ /** Encode a text message as a WebSocket frame. */
214
+ function encodeFrame(data) {
215
+ const payload = Buffer.from(data, "utf-8");
216
+ const len = payload.length;
217
+ let header;
218
+ if (len < 126) {
219
+ header = Buffer.alloc(2);
220
+ header[0] = 0x81; // FIN + text opcode
221
+ header[1] = len;
222
+ }
223
+ else if (len < 65536) {
224
+ header = Buffer.alloc(4);
225
+ header[0] = 0x81;
226
+ header[1] = 126;
227
+ header.writeUInt16BE(len, 2);
228
+ }
229
+ else {
230
+ header = Buffer.alloc(10);
231
+ header[0] = 0x81;
232
+ header[1] = 127;
233
+ // Write as two 32-bit values (BigInt not needed for reasonable payloads)
234
+ header.writeUInt32BE(0, 2);
235
+ header.writeUInt32BE(len, 6);
236
+ }
237
+ return Buffer.concat([header, payload]);
238
+ }
239
+ /** Encode a close frame. */
240
+ function encodeCloseFrame(code = 1000) {
241
+ const buf = Buffer.alloc(4);
242
+ buf[0] = 0x88; // FIN + close opcode
243
+ buf[1] = 2; // payload length
244
+ buf.writeUInt16BE(code, 2);
245
+ return buf;
246
+ }
247
+ /** Encode a pong frame. */
248
+ function encodePongFrame(payload) {
249
+ if (!payload || payload.length === 0) {
250
+ const buf = Buffer.alloc(2);
251
+ buf[0] = 0x8a; // FIN + pong opcode
252
+ buf[1] = 0;
253
+ return buf;
254
+ }
255
+ const buf = Buffer.alloc(2 + payload.length);
256
+ buf[0] = 0x8a;
257
+ buf[1] = payload.length;
258
+ payload.copy(buf, 2);
259
+ return buf;
260
+ }
261
+ /** Encode a ping frame. */
262
+ function encodePingFrame() {
263
+ const buf = Buffer.alloc(2);
264
+ buf[0] = 0x89; // FIN + ping opcode
265
+ buf[1] = 0;
266
+ return buf;
267
+ }
268
+ /**
269
+ * Create a WebSocket manager that handles upgrades and broadcasting.
270
+ *
271
+ * Usage:
272
+ * ```ts
273
+ * const ws = createWebSocketManager();
274
+ * server.on("upgrade", ws.handleUpgrade);
275
+ * ws.broadcast({ type: "rex:item-updated", itemId: "..." });
276
+ * ```
277
+ */
278
+ export function createWebSocketManager(opts) {
279
+ const clients = new Set();
280
+ let pingInterval = null;
281
+ const tracker = opts?.healthTracker;
282
+ /**
283
+ * Idempotent client removal — safe to call from multiple event handlers.
284
+ *
285
+ * Performs full cleanup in a single call:
286
+ * 1. Removes from the broadcast set (stops future broadcasts immediately)
287
+ * 2. Strips event listeners (breaks closure references for GC)
288
+ * 3. Destroys the underlying socket (releases OS resources)
289
+ *
290
+ * Because listeners are removed before the socket is destroyed, the
291
+ * destroy → close → removeClient chain cannot recurse.
292
+ */
293
+ function removeClient(client, reason) {
294
+ if (!clients.delete(client))
295
+ return; // already removed — nothing to do
296
+ // Record the disconnect in the health tracker.
297
+ if (tracker && client.trackingId) {
298
+ tracker.recordDisconnect(client.trackingId, reason ?? "close");
299
+ }
300
+ // Break closure references so the client + socket can be GC'd immediately.
301
+ client.socket.removeAllListeners();
302
+ // Release the OS socket if still open.
303
+ if (!client.socket.destroyed) {
304
+ client.socket.destroy();
305
+ }
306
+ }
307
+ /**
308
+ * Remove clients whose underlying socket is no longer writable.
309
+ * Called before each broadcast to catch connections that died between
310
+ * event-loop ticks without emitting a socket event.
311
+ *
312
+ * Uses removeClient() for full cleanup (listener removal + socket destroy).
313
+ */
314
+ function pruneDeadClients() {
315
+ for (const client of clients) {
316
+ if (client.socket.destroyed || !client.socket.writable) {
317
+ removeClient(client, "prune");
318
+ }
319
+ }
320
+ }
321
+ // Keepalive pings — safety net for connections that go silent without
322
+ // a TCP FIN/RST (e.g. network drops). Primary detection is event-driven.
323
+ function startPingInterval() {
324
+ if (pingInterval)
325
+ return;
326
+ pingInterval = setInterval(() => {
327
+ for (const client of clients) {
328
+ if (!client.alive) {
329
+ // Missed last ping — full cleanup via removeClient
330
+ removeClient(client, "ping_timeout");
331
+ continue;
332
+ }
333
+ client.alive = false;
334
+ try {
335
+ client.socket.write(encodePingFrame());
336
+ }
337
+ catch {
338
+ removeClient(client, "write_fail");
339
+ }
340
+ }
341
+ }, PING_INTERVAL_MS);
342
+ }
343
+ function handleUpgrade(req, socket, head) {
344
+ const key = req.headers["sec-websocket-key"];
345
+ if (!key) {
346
+ socket.destroy();
347
+ return;
348
+ }
349
+ // Enable TCP-level keepalive for OS-level dead-peer detection.
350
+ // The socket is typed as Duplex but is a net.Socket at runtime;
351
+ // guard with runtime checks so non-TCP transports still work.
352
+ const sock = socket;
353
+ if (typeof sock.setKeepAlive === "function") {
354
+ sock.setKeepAlive(true, 1000);
355
+ }
356
+ if (typeof sock.setNoDelay === "function") {
357
+ sock.setNoDelay(true);
358
+ }
359
+ const acceptKey = computeAcceptKey(key);
360
+ // Send the handshake response
361
+ const response = [
362
+ "HTTP/1.1 101 Switching Protocols",
363
+ "Upgrade: websocket",
364
+ "Connection: Upgrade",
365
+ `Sec-WebSocket-Accept: ${acceptKey}`,
366
+ "",
367
+ "",
368
+ ].join("\r\n");
369
+ socket.write(response);
370
+ const trackingId = tracker?.recordConnect();
371
+ const client = { socket, alive: true, trackingId };
372
+ clients.add(client);
373
+ startPingInterval();
374
+ // Process any data that was already buffered
375
+ if (head.length > 0) {
376
+ processData(client, head);
377
+ }
378
+ socket.on("data", (data) => {
379
+ processData(client, data);
380
+ });
381
+ // Immediate disconnect detection — every socket lifecycle event that
382
+ // signals the connection is gone triggers client removal. Set.delete
383
+ // is idempotent so overlapping events are harmless.
384
+ socket.on("close", () => removeClient(client, "close"));
385
+ socket.on("error", () => removeClient(client, "error"));
386
+ socket.on("end", () => removeClient(client, "end"));
387
+ // Send a welcome message
388
+ try {
389
+ const welcomeMsg = JSON.stringify({
390
+ type: "connected",
391
+ timestamp: new Date().toISOString(),
392
+ });
393
+ socket.write(encodeFrame(welcomeMsg));
394
+ }
395
+ catch {
396
+ // ignore
397
+ }
398
+ }
399
+ /** Parse incoming WebSocket frames (simplified — handles text, close, ping, pong). */
400
+ function processData(client, data) {
401
+ if (data.length < 2)
402
+ return;
403
+ const opcode = data[0] & 0x0f;
404
+ const masked = (data[1] & 0x80) !== 0;
405
+ let payloadLen = data[1] & 0x7f;
406
+ let offset = 2;
407
+ if (payloadLen === 126) {
408
+ if (data.length < 4)
409
+ return;
410
+ payloadLen = data.readUInt16BE(2);
411
+ offset = 4;
412
+ }
413
+ else if (payloadLen === 127) {
414
+ if (data.length < 10)
415
+ return;
416
+ payloadLen = data.readUInt32BE(6); // Ignore high 4 bytes
417
+ offset = 10;
418
+ }
419
+ let maskKey = null;
420
+ if (masked) {
421
+ if (data.length < offset + 4)
422
+ return;
423
+ maskKey = data.subarray(offset, offset + 4);
424
+ offset += 4;
425
+ }
426
+ if (data.length < offset + payloadLen)
427
+ return;
428
+ const payload = data.subarray(offset, offset + payloadLen);
429
+ if (maskKey) {
430
+ for (let i = 0; i < payload.length; i++) {
431
+ payload[i] ^= maskKey[i % 4];
432
+ }
433
+ }
434
+ switch (opcode) {
435
+ case 0x01: // Text frame
436
+ // Client messages are acknowledged but not processed further
437
+ client.alive = true;
438
+ break;
439
+ case 0x08: // Close
440
+ try {
441
+ client.socket.write(encodeCloseFrame());
442
+ }
443
+ catch { /* ignore */ }
444
+ removeClient(client, "close");
445
+ break;
446
+ case 0x09: // Ping
447
+ client.alive = true;
448
+ try {
449
+ client.socket.write(encodePongFrame(payload));
450
+ }
451
+ catch { /* ignore */ }
452
+ break;
453
+ case 0x0a: // Pong
454
+ client.alive = true;
455
+ break;
456
+ }
457
+ }
458
+ function broadcast(data) {
459
+ if (clients.size === 0)
460
+ return;
461
+ tracker?.recordBroadcast();
462
+ // Single-pass broadcast: inline health checks replace the separate
463
+ // pruneDeadClients() call, and JSON serialization is deferred until
464
+ // the first confirmed-active connection is found. This means:
465
+ // 1. JSON.stringify is never called unless an active client exists
466
+ // 2. Dead connections are skipped without attempting socket writes
467
+ // 3. Performance scales with active connection count, not set size
468
+ let msg = null;
469
+ for (const client of clients) {
470
+ if (client.socket.destroyed || !client.socket.writable) {
471
+ removeClient(client, "prune");
472
+ continue;
473
+ }
474
+ // Lazy serialization: only pay the JSON.stringify + frame encoding
475
+ // cost once we have a confirmed-active client to write to.
476
+ if (msg === null) {
477
+ msg = encodeFrame(JSON.stringify(data));
478
+ }
479
+ try {
480
+ client.socket.write(msg);
481
+ }
482
+ catch {
483
+ tracker?.recordBroadcastWriteFailure();
484
+ removeClient(client, "write_fail");
485
+ }
486
+ }
487
+ }
488
+ function clientCount() {
489
+ return clients.size;
490
+ }
491
+ function shutdown() {
492
+ if (pingInterval) {
493
+ clearInterval(pingInterval);
494
+ pingInterval = null;
495
+ }
496
+ for (const client of clients) {
497
+ if (tracker && client.trackingId) {
498
+ tracker.recordDisconnect(client.trackingId, "shutdown");
499
+ }
500
+ try {
501
+ client.socket.write(encodeCloseFrame());
502
+ client.socket.destroy();
503
+ }
504
+ catch {
505
+ // ignore
506
+ }
507
+ }
508
+ clients.clear();
509
+ }
510
+ return { handleUpgrade, broadcast, clientCount, shutdown };
511
+ }
512
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/server/websocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Data file name constants for sourcevision output.
3
+ *
4
+ * Shared between the server layer (which serves these files) and the
5
+ * viewer layer (which fetches/validates them). Deliberately placed in
6
+ * a neutral `shared/` directory so neither layer owns the constants.
7
+ */
8
+ export declare const DATA_FILES: {
9
+ readonly manifest: "manifest.json";
10
+ readonly inventory: "inventory.json";
11
+ readonly imports: "imports.json";
12
+ readonly zones: "zones.json";
13
+ readonly components: "components.json";
14
+ readonly callGraph: "callgraph.json";
15
+ };
16
+ export declare const ALL_DATA_FILES: ("manifest.json" | "inventory.json" | "imports.json" | "zones.json" | "components.json" | "callgraph.json")[];
17
+ export declare const SUPPLEMENTARY_FILES: readonly ["llms.txt", "CONTEXT.md"];
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Data file name constants for sourcevision output.
3
+ *
4
+ * Shared between the server layer (which serves these files) and the
5
+ * viewer layer (which fetches/validates them). Deliberately placed in
6
+ * a neutral `shared/` directory so neither layer owns the constants.
7
+ */
8
+ export const DATA_FILES = {
9
+ manifest: "manifest.json",
10
+ inventory: "inventory.json",
11
+ imports: "imports.json",
12
+ zones: "zones.json",
13
+ components: "components.json",
14
+ callGraph: "callgraph.json",
15
+ };
16
+ export const ALL_DATA_FILES = Object.values(DATA_FILES);
17
+ export const SUPPLEMENTARY_FILES = ["llms.txt", "CONTEXT.md"];
18
+ //# sourceMappingURL=data-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-files.js","sourceRoot":"","sources":["../../src/shared/data-files.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,eAAe;IACzB,SAAS,EAAE,gBAAgB;IAC3B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,YAAY;IACnB,UAAU,EAAE,iBAAiB;IAC7B,SAAS,EAAE,gBAAgB;CACnB,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,YAAY,CAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared utilities for the web package.
3
+ *
4
+ * Framework-agnostic modules used by both the viewer and server layers.
5
+ * Each module has zero external dependencies — integration with Preact
6
+ * or other frameworks is handled by the consumer.
7
+ */
8
+ export { DATA_FILES, ALL_DATA_FILES, SUPPLEMENTARY_FILES } from "./data-files.js";
9
+ export type { ViewId } from "./view-id.js";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared utilities for the web package.
3
+ *
4
+ * Framework-agnostic modules used by both the viewer and server layers.
5
+ * Each module has zero external dependencies — integration with Preact
6
+ * or other frameworks is handled by the consumer.
7
+ */
8
+ export { DATA_FILES, ALL_DATA_FILES, SUPPLEMENTARY_FILES } from "./data-files.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * View identifier type — framework-agnostic.
3
+ *
4
+ * Extracted to the shared layer so that modules with zero framework
5
+ * dependencies (e.g. crash-detector) can reference it without importing
6
+ * from the viewer layer.
7
+ */
8
+ export type ViewId = "overview" | "graph" | "zones" | "files" | "routes" | "architecture" | "problems" | "suggestions" | "pr-markdown" | "rex-dashboard" | "prd" | "token-usage" | "validation" | "notion-config" | "integrations" | "hench-runs" | "hench-audit" | "hench-config" | "hench-templates" | "hench-optimization" | "feature-toggles";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * View identifier type — framework-agnostic.
3
+ *
4
+ * Extracted to the shared layer so that modules with zero framework
5
+ * dependencies (e.g. crash-detector) can reference it without importing
6
+ * from the viewer layer.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=view-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-id.js","sourceRoot":"","sources":["../../src/shared/view-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Viewer inbound API barrel — the sanctioned import surface for
3
+ * sibling zones (crash, route, performance, usage) that consume
4
+ * viewer-internal symbols.
5
+ *
6
+ * This is the inbound counterpart to external.ts (which concentrates
7
+ * viewer's outbound imports from schema/, shared/, and messaging/).
8
+ *
9
+ * Rules:
10
+ * - Re-export only — no logic in this file
11
+ * - Any symbol consumed by a file outside the web-viewer zone
12
+ * should be re-exported here
13
+ * - Sibling zones should import from "./api.js" rather than
14
+ * reaching into types.js, route-state.js, or hooks/ directly
15
+ */
16
+ export type { LoadedData, NavigateTo, FileDetail, ZoneDetail, GenericDetail, PRDDetail, DetailItem, } from "./types.js";
17
+ export type { ViewId } from "./types.js";
18
+ export type { ParsedRoute } from "./route-state.js";
19
+ export { parseLegacyHashRoute, parsePathnameRoute, resolveLocationRoute, } from "./route-state.js";