@n-dx/core 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 (1902) hide show
  1. package/LICENSE +96 -0
  2. package/README.md +214 -0
  3. package/ci.js +1243 -0
  4. package/claude-integration.js +331 -0
  5. package/cli.js +975 -0
  6. package/config.js +1054 -0
  7. package/export.js +509 -0
  8. package/help.js +1051 -0
  9. package/package.json +93 -0
  10. package/packages/hench/dist/agent/analysis/adaptive.d.ts +101 -0
  11. package/packages/hench/dist/agent/analysis/adaptive.js +353 -0
  12. package/packages/hench/dist/agent/analysis/adaptive.js.map +1 -0
  13. package/packages/hench/dist/agent/analysis/index.d.ts +26 -0
  14. package/packages/hench/dist/agent/analysis/index.js +30 -0
  15. package/packages/hench/dist/agent/analysis/index.js.map +1 -0
  16. package/packages/hench/dist/agent/analysis/review.d.ts +40 -0
  17. package/packages/hench/dist/agent/analysis/review.js +66 -0
  18. package/packages/hench/dist/agent/analysis/review.js.map +1 -0
  19. package/packages/hench/dist/agent/analysis/spin.d.ts +27 -0
  20. package/packages/hench/dist/agent/analysis/spin.js +32 -0
  21. package/packages/hench/dist/agent/analysis/spin.js.map +1 -0
  22. package/packages/hench/dist/agent/analysis/stuck.d.ts +22 -0
  23. package/packages/hench/dist/agent/analysis/stuck.js +56 -0
  24. package/packages/hench/dist/agent/analysis/stuck.js.map +1 -0
  25. package/packages/hench/dist/agent/analysis/summary.d.ts +9 -0
  26. package/packages/hench/dist/agent/analysis/summary.js +106 -0
  27. package/packages/hench/dist/agent/analysis/summary.js.map +1 -0
  28. package/packages/hench/dist/agent/analysis/workflow.d.ts +60 -0
  29. package/packages/hench/dist/agent/analysis/workflow.js +359 -0
  30. package/packages/hench/dist/agent/analysis/workflow.js.map +1 -0
  31. package/packages/hench/dist/agent/brief.d.ts +33 -0
  32. package/packages/hench/dist/agent/brief.js +235 -0
  33. package/packages/hench/dist/agent/brief.js.map +1 -0
  34. package/packages/hench/dist/agent/cli-loop.d.ts +43 -0
  35. package/packages/hench/dist/agent/cli-loop.js +469 -0
  36. package/packages/hench/dist/agent/cli-loop.js.map +1 -0
  37. package/packages/hench/dist/agent/completion.d.ts +8 -0
  38. package/packages/hench/dist/agent/completion.js +8 -0
  39. package/packages/hench/dist/agent/completion.js.map +1 -0
  40. package/packages/hench/dist/agent/index.d.ts +35 -0
  41. package/packages/hench/dist/agent/index.js +40 -0
  42. package/packages/hench/dist/agent/index.js.map +1 -0
  43. package/packages/hench/dist/agent/lifecycle/cli-loop.d.ts +65 -0
  44. package/packages/hench/dist/agent/lifecycle/cli-loop.js +882 -0
  45. package/packages/hench/dist/agent/lifecycle/cli-loop.js.map +1 -0
  46. package/packages/hench/dist/agent/lifecycle/heartbeat.d.ts +38 -0
  47. package/packages/hench/dist/agent/lifecycle/heartbeat.js +72 -0
  48. package/packages/hench/dist/agent/lifecycle/heartbeat.js.map +1 -0
  49. package/packages/hench/dist/agent/lifecycle/loop.d.ts +11 -0
  50. package/packages/hench/dist/agent/lifecycle/loop.js +300 -0
  51. package/packages/hench/dist/agent/lifecycle/loop.js.map +1 -0
  52. package/packages/hench/dist/agent/lifecycle/shared.d.ts +138 -0
  53. package/packages/hench/dist/agent/lifecycle/shared.js +241 -0
  54. package/packages/hench/dist/agent/lifecycle/shared.js.map +1 -0
  55. package/packages/hench/dist/agent/lifecycle/task-display.d.ts +7 -0
  56. package/packages/hench/dist/agent/lifecycle/task-display.js +22 -0
  57. package/packages/hench/dist/agent/lifecycle/task-display.js.map +1 -0
  58. package/packages/hench/dist/agent/lifecycle/token-budget.d.ts +18 -0
  59. package/packages/hench/dist/agent/lifecycle/token-budget.js +16 -0
  60. package/packages/hench/dist/agent/lifecycle/token-budget.js.map +1 -0
  61. package/packages/hench/dist/agent/lifecycle/token-usage.d.ts +44 -0
  62. package/packages/hench/dist/agent/lifecycle/token-usage.js +102 -0
  63. package/packages/hench/dist/agent/lifecycle/token-usage.js.map +1 -0
  64. package/packages/hench/dist/agent/loop.d.ts +24 -0
  65. package/packages/hench/dist/agent/loop.js +312 -0
  66. package/packages/hench/dist/agent/loop.js.map +1 -0
  67. package/packages/hench/dist/agent/planning/brief.d.ts +40 -0
  68. package/packages/hench/dist/agent/planning/brief.js +267 -0
  69. package/packages/hench/dist/agent/planning/brief.js.map +1 -0
  70. package/packages/hench/dist/agent/planning/prompt.d.ts +2 -0
  71. package/packages/hench/dist/agent/planning/prompt.js +73 -0
  72. package/packages/hench/dist/agent/planning/prompt.js.map +1 -0
  73. package/packages/hench/dist/agent/prompt.d.ts +2 -0
  74. package/packages/hench/dist/agent/prompt.js +65 -0
  75. package/packages/hench/dist/agent/prompt.js.map +1 -0
  76. package/packages/hench/dist/agent/review.d.ts +40 -0
  77. package/packages/hench/dist/agent/review.js +76 -0
  78. package/packages/hench/dist/agent/review.js.map +1 -0
  79. package/packages/hench/dist/agent/stuck.d.ts +22 -0
  80. package/packages/hench/dist/agent/stuck.js +56 -0
  81. package/packages/hench/dist/agent/stuck.js.map +1 -0
  82. package/packages/hench/dist/agent/summary.d.ts +9 -0
  83. package/packages/hench/dist/agent/summary.js +106 -0
  84. package/packages/hench/dist/agent/summary.js.map +1 -0
  85. package/packages/hench/dist/agent/test-runner.d.ts +81 -0
  86. package/packages/hench/dist/agent/test-runner.js +245 -0
  87. package/packages/hench/dist/agent/test-runner.js.map +1 -0
  88. package/packages/hench/dist/agent/token-budget.d.ts +18 -0
  89. package/packages/hench/dist/agent/token-budget.js +16 -0
  90. package/packages/hench/dist/agent/token-budget.js.map +1 -0
  91. package/packages/hench/dist/agent/token-usage.d.ts +27 -0
  92. package/packages/hench/dist/agent/token-usage.js +52 -0
  93. package/packages/hench/dist/agent/token-usage.js.map +1 -0
  94. package/packages/hench/dist/agent/tools.d.ts +8 -0
  95. package/packages/hench/dist/agent/tools.js +8 -0
  96. package/packages/hench/dist/agent/tools.js.map +1 -0
  97. package/packages/hench/dist/cli/commands/config.d.ts +40 -0
  98. package/packages/hench/dist/cli/commands/config.js +463 -0
  99. package/packages/hench/dist/cli/commands/config.js.map +1 -0
  100. package/packages/hench/dist/cli/commands/constants.d.ts +5 -0
  101. package/packages/hench/dist/cli/commands/constants.js +46 -0
  102. package/packages/hench/dist/cli/commands/constants.js.map +1 -0
  103. package/packages/hench/dist/cli/commands/init.d.ts +1 -0
  104. package/packages/hench/dist/cli/commands/init.js +22 -0
  105. package/packages/hench/dist/cli/commands/init.js.map +1 -0
  106. package/packages/hench/dist/cli/commands/run.d.ts +108 -0
  107. package/packages/hench/dist/cli/commands/run.js +847 -0
  108. package/packages/hench/dist/cli/commands/run.js.map +1 -0
  109. package/packages/hench/dist/cli/commands/show.d.ts +1 -0
  110. package/packages/hench/dist/cli/commands/show.js +101 -0
  111. package/packages/hench/dist/cli/commands/show.js.map +1 -0
  112. package/packages/hench/dist/cli/commands/status.d.ts +1 -0
  113. package/packages/hench/dist/cli/commands/status.js +63 -0
  114. package/packages/hench/dist/cli/commands/status.js.map +1 -0
  115. package/packages/hench/dist/cli/commands/task-lookup.d.ts +24 -0
  116. package/packages/hench/dist/cli/commands/task-lookup.js +69 -0
  117. package/packages/hench/dist/cli/commands/task-lookup.js.map +1 -0
  118. package/packages/hench/dist/cli/commands/template.d.ts +12 -0
  119. package/packages/hench/dist/cli/commands/template.js +217 -0
  120. package/packages/hench/dist/cli/commands/template.js.map +1 -0
  121. package/packages/hench/dist/cli/errors.d.ts +55 -0
  122. package/packages/hench/dist/cli/errors.js +185 -0
  123. package/packages/hench/dist/cli/errors.js.map +1 -0
  124. package/packages/hench/dist/cli/help.d.ts +23 -0
  125. package/packages/hench/dist/cli/help.js +186 -0
  126. package/packages/hench/dist/cli/help.js.map +1 -0
  127. package/packages/hench/dist/cli/index.d.ts +21 -0
  128. package/packages/hench/dist/cli/index.js +131 -0
  129. package/packages/hench/dist/cli/index.js.map +1 -0
  130. package/packages/hench/dist/cli/output.d.ts +9 -0
  131. package/packages/hench/dist/cli/output.js +10 -0
  132. package/packages/hench/dist/cli/output.js.map +1 -0
  133. package/packages/hench/dist/guard/commands.d.ts +27 -0
  134. package/packages/hench/dist/guard/commands.js +69 -0
  135. package/packages/hench/dist/guard/commands.js.map +1 -0
  136. package/packages/hench/dist/guard/contracts.d.ts +31 -0
  137. package/packages/hench/dist/guard/contracts.js +8 -0
  138. package/packages/hench/dist/guard/contracts.js.map +1 -0
  139. package/packages/hench/dist/guard/index.d.ts +107 -0
  140. package/packages/hench/dist/guard/index.js +139 -0
  141. package/packages/hench/dist/guard/index.js.map +1 -0
  142. package/packages/hench/dist/guard/paths.d.ts +43 -0
  143. package/packages/hench/dist/guard/paths.js +112 -0
  144. package/packages/hench/dist/guard/paths.js.map +1 -0
  145. package/packages/hench/dist/guard/policy.d.ts +108 -0
  146. package/packages/hench/dist/guard/policy.js +156 -0
  147. package/packages/hench/dist/guard/policy.js.map +1 -0
  148. package/packages/hench/dist/prd/llm-gateway.d.ts +47 -0
  149. package/packages/hench/dist/prd/llm-gateway.js +57 -0
  150. package/packages/hench/dist/prd/llm-gateway.js.map +1 -0
  151. package/packages/hench/dist/prd/ops.d.ts +5 -0
  152. package/packages/hench/dist/prd/ops.js +6 -0
  153. package/packages/hench/dist/prd/ops.js.map +1 -0
  154. package/packages/hench/dist/prd/rex-gateway.d.ts +95 -0
  155. package/packages/hench/dist/prd/rex-gateway.js +104 -0
  156. package/packages/hench/dist/prd/rex-gateway.js.map +1 -0
  157. package/packages/hench/dist/process/concurrent-execution-metrics.d.ts +243 -0
  158. package/packages/hench/dist/process/concurrent-execution-metrics.js +352 -0
  159. package/packages/hench/dist/process/concurrent-execution-metrics.js.map +1 -0
  160. package/packages/hench/dist/process/exec-shell.d.ts +8 -0
  161. package/packages/hench/dist/process/exec-shell.js +8 -0
  162. package/packages/hench/dist/process/exec-shell.js.map +1 -0
  163. package/packages/hench/dist/process/exec.d.ts +12 -0
  164. package/packages/hench/dist/process/exec.js +12 -0
  165. package/packages/hench/dist/process/exec.js.map +1 -0
  166. package/packages/hench/dist/process/index.d.ts +22 -0
  167. package/packages/hench/dist/process/index.js +15 -0
  168. package/packages/hench/dist/process/index.js.map +1 -0
  169. package/packages/hench/dist/process/lifecycle.d.ts +208 -0
  170. package/packages/hench/dist/process/lifecycle.js +387 -0
  171. package/packages/hench/dist/process/lifecycle.js.map +1 -0
  172. package/packages/hench/dist/process/limiter.d.ts +85 -0
  173. package/packages/hench/dist/process/limiter.js +215 -0
  174. package/packages/hench/dist/process/limiter.js.map +1 -0
  175. package/packages/hench/dist/process/memory-monitor.d.ts +162 -0
  176. package/packages/hench/dist/process/memory-monitor.js +268 -0
  177. package/packages/hench/dist/process/memory-monitor.js.map +1 -0
  178. package/packages/hench/dist/process/memory-throttle.d.ts +140 -0
  179. package/packages/hench/dist/process/memory-throttle.js +238 -0
  180. package/packages/hench/dist/process/memory-throttle.js.map +1 -0
  181. package/packages/hench/dist/process/pool.d.ts +231 -0
  182. package/packages/hench/dist/process/pool.js +344 -0
  183. package/packages/hench/dist/process/pool.js.map +1 -0
  184. package/packages/hench/dist/process/process-memory-tracker.d.ts +164 -0
  185. package/packages/hench/dist/process/process-memory-tracker.js +249 -0
  186. package/packages/hench/dist/process/process-memory-tracker.js.map +1 -0
  187. package/packages/hench/dist/public.d.ts +62 -0
  188. package/packages/hench/dist/public.js +58 -0
  189. package/packages/hench/dist/public.js.map +1 -0
  190. package/packages/hench/dist/queue/execution-queue.d.ts +128 -0
  191. package/packages/hench/dist/queue/execution-queue.js +206 -0
  192. package/packages/hench/dist/queue/execution-queue.js.map +1 -0
  193. package/packages/hench/dist/queue/format.d.ts +19 -0
  194. package/packages/hench/dist/queue/format.js +52 -0
  195. package/packages/hench/dist/queue/format.js.map +1 -0
  196. package/packages/hench/dist/queue/index.d.ts +5 -0
  197. package/packages/hench/dist/queue/index.js +4 -0
  198. package/packages/hench/dist/queue/index.js.map +1 -0
  199. package/packages/hench/dist/queue/priority-scheduler.d.ts +73 -0
  200. package/packages/hench/dist/queue/priority-scheduler.js +119 -0
  201. package/packages/hench/dist/queue/priority-scheduler.js.map +1 -0
  202. package/packages/hench/dist/schema/index.d.ts +6 -0
  203. package/packages/hench/dist/schema/index.js +4 -0
  204. package/packages/hench/dist/schema/index.js.map +1 -0
  205. package/packages/hench/dist/schema/templates.d.ts +34 -0
  206. package/packages/hench/dist/schema/templates.js +147 -0
  207. package/packages/hench/dist/schema/templates.js.map +1 -0
  208. package/packages/hench/dist/schema/v1.d.ts +235 -0
  209. package/packages/hench/dist/schema/v1.js +34 -0
  210. package/packages/hench/dist/schema/v1.js.map +1 -0
  211. package/packages/hench/dist/schema/validate.d.ts +601 -0
  212. package/packages/hench/dist/schema/validate.js +166 -0
  213. package/packages/hench/dist/schema/validate.js.map +1 -0
  214. package/packages/hench/dist/shared/glob.d.ts +11 -0
  215. package/packages/hench/dist/shared/glob.js +57 -0
  216. package/packages/hench/dist/shared/glob.js.map +1 -0
  217. package/packages/hench/dist/store/adjustments.d.ts +75 -0
  218. package/packages/hench/dist/store/adjustments.js +139 -0
  219. package/packages/hench/dist/store/adjustments.js.map +1 -0
  220. package/packages/hench/dist/store/config.d.ts +6 -0
  221. package/packages/hench/dist/store/config.js +41 -0
  222. package/packages/hench/dist/store/config.js.map +1 -0
  223. package/packages/hench/dist/store/index.d.ts +7 -0
  224. package/packages/hench/dist/store/index.js +6 -0
  225. package/packages/hench/dist/store/index.js.map +1 -0
  226. package/packages/hench/dist/store/json.d.ts +1 -0
  227. package/packages/hench/dist/store/json.js +3 -0
  228. package/packages/hench/dist/store/json.js.map +1 -0
  229. package/packages/hench/dist/store/project-config.d.ts +62 -0
  230. package/packages/hench/dist/store/project-config.js +100 -0
  231. package/packages/hench/dist/store/project-config.js.map +1 -0
  232. package/packages/hench/dist/store/run-archiver.d.ts +107 -0
  233. package/packages/hench/dist/store/run-archiver.js +204 -0
  234. package/packages/hench/dist/store/run-archiver.js.map +1 -0
  235. package/packages/hench/dist/store/run-change-detector.d.ts +99 -0
  236. package/packages/hench/dist/store/run-change-detector.js +170 -0
  237. package/packages/hench/dist/store/run-change-detector.js.map +1 -0
  238. package/packages/hench/dist/store/run-retention-scheduler.d.ts +80 -0
  239. package/packages/hench/dist/store/run-retention-scheduler.js +143 -0
  240. package/packages/hench/dist/store/run-retention-scheduler.js.map +1 -0
  241. package/packages/hench/dist/store/run-retention.d.ts +150 -0
  242. package/packages/hench/dist/store/run-retention.js +327 -0
  243. package/packages/hench/dist/store/run-retention.js.map +1 -0
  244. package/packages/hench/dist/store/runs.d.ts +4 -0
  245. package/packages/hench/dist/store/runs.js +80 -0
  246. package/packages/hench/dist/store/runs.js.map +1 -0
  247. package/packages/hench/dist/store/suggestions.d.ts +43 -0
  248. package/packages/hench/dist/store/suggestions.js +61 -0
  249. package/packages/hench/dist/store/suggestions.js.map +1 -0
  250. package/packages/hench/dist/store/templates.d.ts +34 -0
  251. package/packages/hench/dist/store/templates.js +119 -0
  252. package/packages/hench/dist/store/templates.js.map +1 -0
  253. package/packages/hench/dist/tools/contracts.d.ts +60 -0
  254. package/packages/hench/dist/tools/contracts.js +2 -0
  255. package/packages/hench/dist/tools/contracts.js.map +1 -0
  256. package/packages/hench/dist/tools/dispatch.d.ts +29 -0
  257. package/packages/hench/dist/tools/dispatch.js +213 -0
  258. package/packages/hench/dist/tools/dispatch.js.map +1 -0
  259. package/packages/hench/dist/tools/exec-shell.d.ts +23 -0
  260. package/packages/hench/dist/tools/exec-shell.js +29 -0
  261. package/packages/hench/dist/tools/exec-shell.js.map +1 -0
  262. package/packages/hench/dist/tools/files.d.ts +17 -0
  263. package/packages/hench/dist/tools/files.js +111 -0
  264. package/packages/hench/dist/tools/files.js.map +1 -0
  265. package/packages/hench/dist/tools/git.d.ts +5 -0
  266. package/packages/hench/dist/tools/git.js +48 -0
  267. package/packages/hench/dist/tools/git.js.map +1 -0
  268. package/packages/hench/dist/tools/index.d.ts +17 -0
  269. package/packages/hench/dist/tools/index.js +19 -0
  270. package/packages/hench/dist/tools/index.js.map +1 -0
  271. package/packages/hench/dist/tools/rex.d.ts +32 -0
  272. package/packages/hench/dist/tools/rex.js +185 -0
  273. package/packages/hench/dist/tools/rex.js.map +1 -0
  274. package/packages/hench/dist/tools/shell.d.ts +6 -0
  275. package/packages/hench/dist/tools/shell.js +10 -0
  276. package/packages/hench/dist/tools/shell.js.map +1 -0
  277. package/packages/hench/dist/tools/test-runner.d.ts +81 -0
  278. package/packages/hench/dist/tools/test-runner.js +229 -0
  279. package/packages/hench/dist/tools/test-runner.js.map +1 -0
  280. package/packages/hench/dist/types/index.d.ts +4 -0
  281. package/packages/hench/dist/types/index.js +6 -0
  282. package/packages/hench/dist/types/index.js.map +1 -0
  283. package/packages/hench/dist/types/output.d.ts +47 -0
  284. package/packages/hench/dist/types/output.js +74 -0
  285. package/packages/hench/dist/types/output.js.map +1 -0
  286. package/packages/hench/dist/validation/completion.d.ts +37 -0
  287. package/packages/hench/dist/validation/completion.js +83 -0
  288. package/packages/hench/dist/validation/completion.js.map +1 -0
  289. package/packages/hench/dist/validation/index.d.ts +9 -0
  290. package/packages/hench/dist/validation/index.js +9 -0
  291. package/packages/hench/dist/validation/index.js.map +1 -0
  292. package/packages/hench/package.json +40 -0
  293. package/packages/llm-client/dist/api-provider.d.ts +47 -0
  294. package/packages/llm-client/dist/api-provider.js +126 -0
  295. package/packages/llm-client/dist/api-provider.js.map +1 -0
  296. package/packages/llm-client/dist/auth.d.ts +85 -0
  297. package/packages/llm-client/dist/auth.js +165 -0
  298. package/packages/llm-client/dist/auth.js.map +1 -0
  299. package/packages/llm-client/dist/cli-provider.d.ts +49 -0
  300. package/packages/llm-client/dist/cli-provider.js +226 -0
  301. package/packages/llm-client/dist/cli-provider.js.map +1 -0
  302. package/packages/llm-client/dist/codex-cli-provider.d.ts +15 -0
  303. package/packages/llm-client/dist/codex-cli-provider.js +206 -0
  304. package/packages/llm-client/dist/codex-cli-provider.js.map +1 -0
  305. package/packages/llm-client/dist/config.d.ts +39 -0
  306. package/packages/llm-client/dist/config.js +85 -0
  307. package/packages/llm-client/dist/config.js.map +1 -0
  308. package/packages/llm-client/dist/create-client.d.ts +66 -0
  309. package/packages/llm-client/dist/create-client.js +73 -0
  310. package/packages/llm-client/dist/create-client.js.map +1 -0
  311. package/packages/llm-client/dist/exec.d.ts +231 -0
  312. package/packages/llm-client/dist/exec.js +440 -0
  313. package/packages/llm-client/dist/exec.js.map +1 -0
  314. package/packages/llm-client/dist/help-format.d.ts +143 -0
  315. package/packages/llm-client/dist/help-format.js +280 -0
  316. package/packages/llm-client/dist/help-format.js.map +1 -0
  317. package/packages/llm-client/dist/json.d.ts +15 -0
  318. package/packages/llm-client/dist/json.js +18 -0
  319. package/packages/llm-client/dist/json.js.map +1 -0
  320. package/packages/llm-client/dist/llm-client.d.ts +43 -0
  321. package/packages/llm-client/dist/llm-client.js +48 -0
  322. package/packages/llm-client/dist/llm-client.js.map +1 -0
  323. package/packages/llm-client/dist/llm-config.d.ts +16 -0
  324. package/packages/llm-client/dist/llm-config.js +81 -0
  325. package/packages/llm-client/dist/llm-config.js.map +1 -0
  326. package/packages/llm-client/dist/llm-types.d.ts +40 -0
  327. package/packages/llm-client/dist/llm-types.js +17 -0
  328. package/packages/llm-client/dist/llm-types.js.map +1 -0
  329. package/packages/llm-client/dist/output.d.ts +27 -0
  330. package/packages/llm-client/dist/output.js +38 -0
  331. package/packages/llm-client/dist/output.js.map +1 -0
  332. package/packages/llm-client/dist/project-config.d.ts +25 -0
  333. package/packages/llm-client/dist/project-config.js +66 -0
  334. package/packages/llm-client/dist/project-config.js.map +1 -0
  335. package/packages/llm-client/dist/project-dirs.d.ts +32 -0
  336. package/packages/llm-client/dist/project-dirs.js +31 -0
  337. package/packages/llm-client/dist/project-dirs.js.map +1 -0
  338. package/packages/llm-client/dist/provider-interface.d.ts +194 -0
  339. package/packages/llm-client/dist/provider-interface.js +50 -0
  340. package/packages/llm-client/dist/provider-interface.js.map +1 -0
  341. package/packages/llm-client/dist/provider-registry.d.ts +147 -0
  342. package/packages/llm-client/dist/provider-registry.js +175 -0
  343. package/packages/llm-client/dist/provider-registry.js.map +1 -0
  344. package/packages/llm-client/dist/provider-session.d.ts +141 -0
  345. package/packages/llm-client/dist/provider-session.js +174 -0
  346. package/packages/llm-client/dist/provider-session.js.map +1 -0
  347. package/packages/llm-client/dist/public.d.ts +120 -0
  348. package/packages/llm-client/dist/public.js +122 -0
  349. package/packages/llm-client/dist/public.js.map +1 -0
  350. package/packages/llm-client/dist/suggest.d.ts +27 -0
  351. package/packages/llm-client/dist/suggest.js +63 -0
  352. package/packages/llm-client/dist/suggest.js.map +1 -0
  353. package/packages/llm-client/dist/token-usage.d.ts +43 -0
  354. package/packages/llm-client/dist/token-usage.js +106 -0
  355. package/packages/llm-client/dist/token-usage.js.map +1 -0
  356. package/packages/llm-client/dist/types.d.ts +108 -0
  357. package/packages/llm-client/dist/types.js +49 -0
  358. package/packages/llm-client/dist/types.js.map +1 -0
  359. package/packages/llm-client/package.json +34 -0
  360. package/packages/rex/dist/analyze/acknowledge.d.ts +44 -0
  361. package/packages/rex/dist/analyze/acknowledge.js +100 -0
  362. package/packages/rex/dist/analyze/acknowledge.js.map +1 -0
  363. package/packages/rex/dist/analyze/analyze-shared.d.ts +51 -0
  364. package/packages/rex/dist/analyze/analyze-shared.js +356 -0
  365. package/packages/rex/dist/analyze/analyze-shared.js.map +1 -0
  366. package/packages/rex/dist/analyze/batch-types.d.ts +48 -0
  367. package/packages/rex/dist/analyze/batch-types.js +9 -0
  368. package/packages/rex/dist/analyze/batch-types.js.map +1 -0
  369. package/packages/rex/dist/analyze/consolidation-guard.d.ts +45 -0
  370. package/packages/rex/dist/analyze/consolidation-guard.js +125 -0
  371. package/packages/rex/dist/analyze/consolidation-guard.js.map +1 -0
  372. package/packages/rex/dist/analyze/decompose.d.ts +62 -0
  373. package/packages/rex/dist/analyze/decompose.js +212 -0
  374. package/packages/rex/dist/analyze/decompose.js.map +1 -0
  375. package/packages/rex/dist/analyze/dedupe.d.ts +30 -0
  376. package/packages/rex/dist/analyze/dedupe.js +339 -0
  377. package/packages/rex/dist/analyze/dedupe.js.map +1 -0
  378. package/packages/rex/dist/analyze/diff.d.ts +13 -0
  379. package/packages/rex/dist/analyze/diff.js +146 -0
  380. package/packages/rex/dist/analyze/diff.js.map +1 -0
  381. package/packages/rex/dist/analyze/extract.d.ts +152 -0
  382. package/packages/rex/dist/analyze/extract.js +1338 -0
  383. package/packages/rex/dist/analyze/extract.js.map +1 -0
  384. package/packages/rex/dist/analyze/file-validation.d.ts +122 -0
  385. package/packages/rex/dist/analyze/file-validation.js +427 -0
  386. package/packages/rex/dist/analyze/file-validation.js.map +1 -0
  387. package/packages/rex/dist/analyze/guided.d.ts +17 -0
  388. package/packages/rex/dist/analyze/guided.js +162 -0
  389. package/packages/rex/dist/analyze/guided.js.map +1 -0
  390. package/packages/rex/dist/analyze/index.d.ts +27 -0
  391. package/packages/rex/dist/analyze/index.js +15 -0
  392. package/packages/rex/dist/analyze/index.js.map +1 -0
  393. package/packages/rex/dist/analyze/llm-bridge.d.ts +49 -0
  394. package/packages/rex/dist/analyze/llm-bridge.js +133 -0
  395. package/packages/rex/dist/analyze/llm-bridge.js.map +1 -0
  396. package/packages/rex/dist/analyze/modify-reason.d.ts +68 -0
  397. package/packages/rex/dist/analyze/modify-reason.js +182 -0
  398. package/packages/rex/dist/analyze/modify-reason.js.map +1 -0
  399. package/packages/rex/dist/analyze/propose.d.ts +72 -0
  400. package/packages/rex/dist/analyze/propose.js +246 -0
  401. package/packages/rex/dist/analyze/propose.js.map +1 -0
  402. package/packages/rex/dist/analyze/reason.d.ts +277 -0
  403. package/packages/rex/dist/analyze/reason.js +1446 -0
  404. package/packages/rex/dist/analyze/reason.js.map +1 -0
  405. package/packages/rex/dist/analyze/reconcile.d.ts +25 -0
  406. package/packages/rex/dist/analyze/reconcile.js +82 -0
  407. package/packages/rex/dist/analyze/reconcile.js.map +1 -0
  408. package/packages/rex/dist/analyze/reshape-reason.d.ts +38 -0
  409. package/packages/rex/dist/analyze/reshape-reason.js +302 -0
  410. package/packages/rex/dist/analyze/reshape-reason.js.map +1 -0
  411. package/packages/rex/dist/analyze/scanners.d.ts +36 -0
  412. package/packages/rex/dist/analyze/scanners.js +805 -0
  413. package/packages/rex/dist/analyze/scanners.js.map +1 -0
  414. package/packages/rex/dist/analyze/validate-modification.d.ts +54 -0
  415. package/packages/rex/dist/analyze/validate-modification.js +166 -0
  416. package/packages/rex/dist/analyze/validate-modification.js.map +1 -0
  417. package/packages/rex/dist/cli/commands/adapter.d.ts +11 -0
  418. package/packages/rex/dist/cli/commands/adapter.js +211 -0
  419. package/packages/rex/dist/cli/commands/adapter.js.map +1 -0
  420. package/packages/rex/dist/cli/commands/add.d.ts +1 -0
  421. package/packages/rex/dist/cli/commands/add.js +111 -0
  422. package/packages/rex/dist/cli/commands/add.js.map +1 -0
  423. package/packages/rex/dist/cli/commands/analyze.d.ts +4 -0
  424. package/packages/rex/dist/cli/commands/analyze.js +672 -0
  425. package/packages/rex/dist/cli/commands/analyze.js.map +1 -0
  426. package/packages/rex/dist/cli/commands/chunked-review-state.d.ts +183 -0
  427. package/packages/rex/dist/cli/commands/chunked-review-state.js +637 -0
  428. package/packages/rex/dist/cli/commands/chunked-review-state.js.map +1 -0
  429. package/packages/rex/dist/cli/commands/chunked-review.d.ts +21 -0
  430. package/packages/rex/dist/cli/commands/chunked-review.js +147 -0
  431. package/packages/rex/dist/cli/commands/chunked-review.js.map +1 -0
  432. package/packages/rex/dist/cli/commands/constants.d.ts +3 -0
  433. package/packages/rex/dist/cli/commands/constants.js +50 -0
  434. package/packages/rex/dist/cli/commands/constants.js.map +1 -0
  435. package/packages/rex/dist/cli/commands/decomposition-review.d.ts +92 -0
  436. package/packages/rex/dist/cli/commands/decomposition-review.js +258 -0
  437. package/packages/rex/dist/cli/commands/decomposition-review.js.map +1 -0
  438. package/packages/rex/dist/cli/commands/fix.d.ts +8 -0
  439. package/packages/rex/dist/cli/commands/fix.js +101 -0
  440. package/packages/rex/dist/cli/commands/fix.js.map +1 -0
  441. package/packages/rex/dist/cli/commands/format-loe.d.ts +22 -0
  442. package/packages/rex/dist/cli/commands/format-loe.js +35 -0
  443. package/packages/rex/dist/cli/commands/format-loe.js.map +1 -0
  444. package/packages/rex/dist/cli/commands/health.d.ts +7 -0
  445. package/packages/rex/dist/cli/commands/health.js +24 -0
  446. package/packages/rex/dist/cli/commands/health.js.map +1 -0
  447. package/packages/rex/dist/cli/commands/init.d.ts +1 -0
  448. package/packages/rex/dist/cli/commands/init.js +64 -0
  449. package/packages/rex/dist/cli/commands/init.js.map +1 -0
  450. package/packages/rex/dist/cli/commands/move.d.ts +1 -0
  451. package/packages/rex/dist/cli/commands/move.js +45 -0
  452. package/packages/rex/dist/cli/commands/move.js.map +1 -0
  453. package/packages/rex/dist/cli/commands/next.d.ts +1 -0
  454. package/packages/rex/dist/cli/commands/next.js +64 -0
  455. package/packages/rex/dist/cli/commands/next.js.map +1 -0
  456. package/packages/rex/dist/cli/commands/prune.d.ts +1 -0
  457. package/packages/rex/dist/cli/commands/prune.js +561 -0
  458. package/packages/rex/dist/cli/commands/prune.js.map +1 -0
  459. package/packages/rex/dist/cli/commands/recommend.d.ts +2 -0
  460. package/packages/rex/dist/cli/commands/recommend.js +517 -0
  461. package/packages/rex/dist/cli/commands/recommend.js.map +1 -0
  462. package/packages/rex/dist/cli/commands/remove.d.ts +12 -0
  463. package/packages/rex/dist/cli/commands/remove.js +206 -0
  464. package/packages/rex/dist/cli/commands/remove.js.map +1 -0
  465. package/packages/rex/dist/cli/commands/reorganize.d.ts +16 -0
  466. package/packages/rex/dist/cli/commands/reorganize.js +288 -0
  467. package/packages/rex/dist/cli/commands/reorganize.js.map +1 -0
  468. package/packages/rex/dist/cli/commands/report.d.ts +49 -0
  469. package/packages/rex/dist/cli/commands/report.js +218 -0
  470. package/packages/rex/dist/cli/commands/report.js.map +1 -0
  471. package/packages/rex/dist/cli/commands/reshape.d.ts +1 -0
  472. package/packages/rex/dist/cli/commands/reshape.js +182 -0
  473. package/packages/rex/dist/cli/commands/reshape.js.map +1 -0
  474. package/packages/rex/dist/cli/commands/smart-add-duplicates.d.ts +45 -0
  475. package/packages/rex/dist/cli/commands/smart-add-duplicates.js +252 -0
  476. package/packages/rex/dist/cli/commands/smart-add-duplicates.js.map +1 -0
  477. package/packages/rex/dist/cli/commands/smart-add.d.ts +80 -0
  478. package/packages/rex/dist/cli/commands/smart-add.js +1343 -0
  479. package/packages/rex/dist/cli/commands/smart-add.js.map +1 -0
  480. package/packages/rex/dist/cli/commands/status-sections.d.ts +70 -0
  481. package/packages/rex/dist/cli/commands/status-sections.js +201 -0
  482. package/packages/rex/dist/cli/commands/status-sections.js.map +1 -0
  483. package/packages/rex/dist/cli/commands/status-shared.d.ts +44 -0
  484. package/packages/rex/dist/cli/commands/status-shared.js +191 -0
  485. package/packages/rex/dist/cli/commands/status-shared.js.map +1 -0
  486. package/packages/rex/dist/cli/commands/status.d.ts +3 -0
  487. package/packages/rex/dist/cli/commands/status.js +118 -0
  488. package/packages/rex/dist/cli/commands/status.js.map +1 -0
  489. package/packages/rex/dist/cli/commands/sync.d.ts +11 -0
  490. package/packages/rex/dist/cli/commands/sync.js +131 -0
  491. package/packages/rex/dist/cli/commands/sync.js.map +1 -0
  492. package/packages/rex/dist/cli/commands/token-format.d.ts +31 -0
  493. package/packages/rex/dist/cli/commands/token-format.js +86 -0
  494. package/packages/rex/dist/cli/commands/token-format.js.map +1 -0
  495. package/packages/rex/dist/cli/commands/update.d.ts +1 -0
  496. package/packages/rex/dist/cli/commands/update.js +146 -0
  497. package/packages/rex/dist/cli/commands/update.js.map +1 -0
  498. package/packages/rex/dist/cli/commands/usage.d.ts +1 -0
  499. package/packages/rex/dist/cli/commands/usage.js +192 -0
  500. package/packages/rex/dist/cli/commands/usage.js.map +1 -0
  501. package/packages/rex/dist/cli/commands/validate-interactive.d.ts +46 -0
  502. package/packages/rex/dist/cli/commands/validate-interactive.js +236 -0
  503. package/packages/rex/dist/cli/commands/validate-interactive.js.map +1 -0
  504. package/packages/rex/dist/cli/commands/validate.d.ts +10 -0
  505. package/packages/rex/dist/cli/commands/validate.js +212 -0
  506. package/packages/rex/dist/cli/commands/validate.js.map +1 -0
  507. package/packages/rex/dist/cli/commands/verify.d.ts +1 -0
  508. package/packages/rex/dist/cli/commands/verify.js +90 -0
  509. package/packages/rex/dist/cli/commands/verify.js.map +1 -0
  510. package/packages/rex/dist/cli/errors.d.ts +40 -0
  511. package/packages/rex/dist/cli/errors.js +125 -0
  512. package/packages/rex/dist/cli/errors.js.map +1 -0
  513. package/packages/rex/dist/cli/help.d.ts +23 -0
  514. package/packages/rex/dist/cli/help.js +584 -0
  515. package/packages/rex/dist/cli/help.js.map +1 -0
  516. package/packages/rex/dist/cli/index.d.ts +2 -0
  517. package/packages/rex/dist/cli/index.js +405 -0
  518. package/packages/rex/dist/cli/index.js.map +1 -0
  519. package/packages/rex/dist/cli/mcp-tools.d.ts +86 -0
  520. package/packages/rex/dist/cli/mcp-tools.js +555 -0
  521. package/packages/rex/dist/cli/mcp-tools.js.map +1 -0
  522. package/packages/rex/dist/cli/mcp.d.ts +26 -0
  523. package/packages/rex/dist/cli/mcp.js +144 -0
  524. package/packages/rex/dist/cli/mcp.js.map +1 -0
  525. package/packages/rex/dist/cli/output.d.ts +36 -0
  526. package/packages/rex/dist/cli/output.js +70 -0
  527. package/packages/rex/dist/cli/output.js.map +1 -0
  528. package/packages/rex/dist/cli/validate-input.d.ts +45 -0
  529. package/packages/rex/dist/cli/validate-input.js +87 -0
  530. package/packages/rex/dist/cli/validate-input.js.map +1 -0
  531. package/packages/rex/dist/core/analytics.d.ts +38 -0
  532. package/packages/rex/dist/core/analytics.js +87 -0
  533. package/packages/rex/dist/core/analytics.js.map +1 -0
  534. package/packages/rex/dist/core/canonical.d.ts +3 -0
  535. package/packages/rex/dist/core/canonical.js +21 -0
  536. package/packages/rex/dist/core/canonical.js.map +1 -0
  537. package/packages/rex/dist/core/cascade-reset.d.ts +31 -0
  538. package/packages/rex/dist/core/cascade-reset.js +47 -0
  539. package/packages/rex/dist/core/cascade-reset.js.map +1 -0
  540. package/packages/rex/dist/core/code-coverage.d.ts +38 -0
  541. package/packages/rex/dist/core/code-coverage.js +85 -0
  542. package/packages/rex/dist/core/code-coverage.js.map +1 -0
  543. package/packages/rex/dist/core/dag.d.ts +6 -0
  544. package/packages/rex/dist/core/dag.js +67 -0
  545. package/packages/rex/dist/core/dag.js.map +1 -0
  546. package/packages/rex/dist/core/delete.d.ts +10 -0
  547. package/packages/rex/dist/core/delete.js +38 -0
  548. package/packages/rex/dist/core/delete.js.map +1 -0
  549. package/packages/rex/dist/core/epic-correlation.d.ts +94 -0
  550. package/packages/rex/dist/core/epic-correlation.js +179 -0
  551. package/packages/rex/dist/core/epic-correlation.js.map +1 -0
  552. package/packages/rex/dist/core/facets.d.ts +54 -0
  553. package/packages/rex/dist/core/facets.js +176 -0
  554. package/packages/rex/dist/core/facets.js.map +1 -0
  555. package/packages/rex/dist/core/fix.d.ts +59 -0
  556. package/packages/rex/dist/core/fix.js +190 -0
  557. package/packages/rex/dist/core/fix.js.map +1 -0
  558. package/packages/rex/dist/core/health.d.ts +43 -0
  559. package/packages/rex/dist/core/health.js +331 -0
  560. package/packages/rex/dist/core/health.js.map +1 -0
  561. package/packages/rex/dist/core/keywords.d.ts +20 -0
  562. package/packages/rex/dist/core/keywords.js +47 -0
  563. package/packages/rex/dist/core/keywords.js.map +1 -0
  564. package/packages/rex/dist/core/merge.d.ts +87 -0
  565. package/packages/rex/dist/core/merge.js +289 -0
  566. package/packages/rex/dist/core/merge.js.map +1 -0
  567. package/packages/rex/dist/core/move.d.ts +48 -0
  568. package/packages/rex/dist/core/move.js +163 -0
  569. package/packages/rex/dist/core/move.js.map +1 -0
  570. package/packages/rex/dist/core/next-task.d.ts +121 -0
  571. package/packages/rex/dist/core/next-task.js +443 -0
  572. package/packages/rex/dist/core/next-task.js.map +1 -0
  573. package/packages/rex/dist/core/notion-map.d.ts +207 -0
  574. package/packages/rex/dist/core/notion-map.js +535 -0
  575. package/packages/rex/dist/core/notion-map.js.map +1 -0
  576. package/packages/rex/dist/core/override-escalation.d.ts +28 -0
  577. package/packages/rex/dist/core/override-escalation.js +69 -0
  578. package/packages/rex/dist/core/override-escalation.js.map +1 -0
  579. package/packages/rex/dist/core/parent-completion.d.ts +41 -0
  580. package/packages/rex/dist/core/parent-completion.js +75 -0
  581. package/packages/rex/dist/core/parent-completion.js.map +1 -0
  582. package/packages/rex/dist/core/parent-reset.d.ts +45 -0
  583. package/packages/rex/dist/core/parent-reset.js +59 -0
  584. package/packages/rex/dist/core/parent-reset.js.map +1 -0
  585. package/packages/rex/dist/core/pending-cache.d.ts +27 -0
  586. package/packages/rex/dist/core/pending-cache.js +55 -0
  587. package/packages/rex/dist/core/pending-cache.js.map +1 -0
  588. package/packages/rex/dist/core/prune.d.ts +50 -0
  589. package/packages/rex/dist/core/prune.js +89 -0
  590. package/packages/rex/dist/core/prune.js.map +1 -0
  591. package/packages/rex/dist/core/remove-epic.d.ts +35 -0
  592. package/packages/rex/dist/core/remove-epic.js +51 -0
  593. package/packages/rex/dist/core/remove-epic.js.map +1 -0
  594. package/packages/rex/dist/core/remove-feature.d.ts +100 -0
  595. package/packages/rex/dist/core/remove-feature.js +189 -0
  596. package/packages/rex/dist/core/remove-feature.js.map +1 -0
  597. package/packages/rex/dist/core/remove-task.d.ts +66 -0
  598. package/packages/rex/dist/core/remove-task.js +93 -0
  599. package/packages/rex/dist/core/remove-task.js.map +1 -0
  600. package/packages/rex/dist/core/reorganize-executor.d.ts +43 -0
  601. package/packages/rex/dist/core/reorganize-executor.js +153 -0
  602. package/packages/rex/dist/core/reorganize-executor.js.map +1 -0
  603. package/packages/rex/dist/core/reorganize.d.ts +109 -0
  604. package/packages/rex/dist/core/reorganize.js +453 -0
  605. package/packages/rex/dist/core/reorganize.js.map +1 -0
  606. package/packages/rex/dist/core/requirements.d.ts +131 -0
  607. package/packages/rex/dist/core/requirements.js +263 -0
  608. package/packages/rex/dist/core/requirements.js.map +1 -0
  609. package/packages/rex/dist/core/reshape.d.ts +88 -0
  610. package/packages/rex/dist/core/reshape.js +168 -0
  611. package/packages/rex/dist/core/reshape.js.map +1 -0
  612. package/packages/rex/dist/core/scope-creep.d.ts +31 -0
  613. package/packages/rex/dist/core/scope-creep.js +53 -0
  614. package/packages/rex/dist/core/scope-creep.js.map +1 -0
  615. package/packages/rex/dist/core/stats.d.ts +12 -0
  616. package/packages/rex/dist/core/stats.js +47 -0
  617. package/packages/rex/dist/core/stats.js.map +1 -0
  618. package/packages/rex/dist/core/structural.d.ts +63 -0
  619. package/packages/rex/dist/core/structural.js +267 -0
  620. package/packages/rex/dist/core/structural.js.map +1 -0
  621. package/packages/rex/dist/core/sync-engine.d.ts +63 -0
  622. package/packages/rex/dist/core/sync-engine.js +429 -0
  623. package/packages/rex/dist/core/sync-engine.js.map +1 -0
  624. package/packages/rex/dist/core/sync.d.ts +82 -0
  625. package/packages/rex/dist/core/sync.js +204 -0
  626. package/packages/rex/dist/core/sync.js.map +1 -0
  627. package/packages/rex/dist/core/timestamps.d.ts +34 -0
  628. package/packages/rex/dist/core/timestamps.js +50 -0
  629. package/packages/rex/dist/core/timestamps.js.map +1 -0
  630. package/packages/rex/dist/core/token-usage.d.ts +196 -0
  631. package/packages/rex/dist/core/token-usage.js +468 -0
  632. package/packages/rex/dist/core/token-usage.js.map +1 -0
  633. package/packages/rex/dist/core/transitions.d.ts +28 -0
  634. package/packages/rex/dist/core/transitions.js +74 -0
  635. package/packages/rex/dist/core/transitions.js.map +1 -0
  636. package/packages/rex/dist/core/tree.d.ts +12 -0
  637. package/packages/rex/dist/core/tree.js +76 -0
  638. package/packages/rex/dist/core/tree.js.map +1 -0
  639. package/packages/rex/dist/core/verify.d.ts +92 -0
  640. package/packages/rex/dist/core/verify.js +201 -0
  641. package/packages/rex/dist/core/verify.js.map +1 -0
  642. package/packages/rex/dist/public.d.ts +115 -0
  643. package/packages/rex/dist/public.js +114 -0
  644. package/packages/rex/dist/public.js.map +1 -0
  645. package/packages/rex/dist/recommend/conflict-detection.d.ts +102 -0
  646. package/packages/rex/dist/recommend/conflict-detection.js +238 -0
  647. package/packages/rex/dist/recommend/conflict-detection.js.map +1 -0
  648. package/packages/rex/dist/recommend/create-from-recommendations.d.ts +109 -0
  649. package/packages/rex/dist/recommend/create-from-recommendations.js +287 -0
  650. package/packages/rex/dist/recommend/create-from-recommendations.js.map +1 -0
  651. package/packages/rex/dist/recommend/types.d.ts +59 -0
  652. package/packages/rex/dist/recommend/types.js +11 -0
  653. package/packages/rex/dist/recommend/types.js.map +1 -0
  654. package/packages/rex/dist/schema/index.d.ts +23 -0
  655. package/packages/rex/dist/schema/index.js +22 -0
  656. package/packages/rex/dist/schema/index.js.map +1 -0
  657. package/packages/rex/dist/schema/levels.d.ts +82 -0
  658. package/packages/rex/dist/schema/levels.js +152 -0
  659. package/packages/rex/dist/schema/levels.js.map +1 -0
  660. package/packages/rex/dist/schema/v1.d.ts +341 -0
  661. package/packages/rex/dist/schema/v1.js +179 -0
  662. package/packages/rex/dist/schema/v1.js.map +1 -0
  663. package/packages/rex/dist/schema/validate.d.ts +194 -0
  664. package/packages/rex/dist/schema/validate.js +136 -0
  665. package/packages/rex/dist/schema/validate.js.map +1 -0
  666. package/packages/rex/dist/store/adapter-registry.d.ts +143 -0
  667. package/packages/rex/dist/store/adapter-registry.js +304 -0
  668. package/packages/rex/dist/store/adapter-registry.js.map +1 -0
  669. package/packages/rex/dist/store/atomic-write.d.ts +22 -0
  670. package/packages/rex/dist/store/atomic-write.js +30 -0
  671. package/packages/rex/dist/store/atomic-write.js.map +1 -0
  672. package/packages/rex/dist/store/contracts.d.ts +142 -0
  673. package/packages/rex/dist/store/contracts.js +19 -0
  674. package/packages/rex/dist/store/contracts.js.map +1 -0
  675. package/packages/rex/dist/store/file-adapter.d.ts +23 -0
  676. package/packages/rex/dist/store/file-adapter.js +150 -0
  677. package/packages/rex/dist/store/file-adapter.js.map +1 -0
  678. package/packages/rex/dist/store/index.d.ts +67 -0
  679. package/packages/rex/dist/store/index.js +78 -0
  680. package/packages/rex/dist/store/index.js.map +1 -0
  681. package/packages/rex/dist/store/integration-schema.d.ts +205 -0
  682. package/packages/rex/dist/store/integration-schema.js +136 -0
  683. package/packages/rex/dist/store/integration-schema.js.map +1 -0
  684. package/packages/rex/dist/store/integration-schemas/index.d.ts +28 -0
  685. package/packages/rex/dist/store/integration-schemas/index.js +45 -0
  686. package/packages/rex/dist/store/integration-schemas/index.js.map +1 -0
  687. package/packages/rex/dist/store/integration-schemas/jira.d.ts +11 -0
  688. package/packages/rex/dist/store/integration-schemas/jira.js +147 -0
  689. package/packages/rex/dist/store/integration-schemas/jira.js.map +1 -0
  690. package/packages/rex/dist/store/integration-schemas/notion.d.ts +11 -0
  691. package/packages/rex/dist/store/integration-schemas/notion.js +80 -0
  692. package/packages/rex/dist/store/integration-schemas/notion.js.map +1 -0
  693. package/packages/rex/dist/store/notion-adapter.d.ts +42 -0
  694. package/packages/rex/dist/store/notion-adapter.js +247 -0
  695. package/packages/rex/dist/store/notion-adapter.js.map +1 -0
  696. package/packages/rex/dist/store/notion-client.d.ts +56 -0
  697. package/packages/rex/dist/store/notion-client.js +82 -0
  698. package/packages/rex/dist/store/notion-client.js.map +1 -0
  699. package/packages/rex/dist/store/notion-map.d.ts +207 -0
  700. package/packages/rex/dist/store/notion-map.js +535 -0
  701. package/packages/rex/dist/store/notion-map.js.map +1 -0
  702. package/packages/rex/dist/store/project-config.d.ts +44 -0
  703. package/packages/rex/dist/store/project-config.js +56 -0
  704. package/packages/rex/dist/store/project-config.js.map +1 -0
  705. package/packages/rex/dist/store/types.d.ts +142 -0
  706. package/packages/rex/dist/store/types.js +19 -0
  707. package/packages/rex/dist/store/types.js.map +1 -0
  708. package/packages/rex/dist/workflow/default.d.ts +1 -0
  709. package/packages/rex/dist/workflow/default.js +21 -0
  710. package/packages/rex/dist/workflow/default.js.map +1 -0
  711. package/packages/rex/package.json +40 -0
  712. package/packages/sourcevision/dist/analyzers/__tests__/components.test.d.ts +1 -0
  713. package/packages/sourcevision/dist/analyzers/__tests__/components.test.js +370 -0
  714. package/packages/sourcevision/dist/analyzers/__tests__/components.test.js.map +1 -0
  715. package/packages/sourcevision/dist/analyzers/__tests__/imports.test.d.ts +1 -0
  716. package/packages/sourcevision/dist/analyzers/__tests__/imports.test.js +101 -0
  717. package/packages/sourcevision/dist/analyzers/__tests__/imports.test.js.map +1 -0
  718. package/packages/sourcevision/dist/analyzers/__tests__/inventory.test.d.ts +1 -0
  719. package/packages/sourcevision/dist/analyzers/__tests__/inventory.test.js +118 -0
  720. package/packages/sourcevision/dist/analyzers/__tests__/inventory.test.js.map +1 -0
  721. package/packages/sourcevision/dist/analyzers/__tests__/manifest.test.d.ts +1 -0
  722. package/packages/sourcevision/dist/analyzers/__tests__/manifest.test.js +61 -0
  723. package/packages/sourcevision/dist/analyzers/__tests__/manifest.test.js.map +1 -0
  724. package/packages/sourcevision/dist/analyzers/__tests__/zones.test.d.ts +1 -0
  725. package/packages/sourcevision/dist/analyzers/__tests__/zones.test.js +836 -0
  726. package/packages/sourcevision/dist/analyzers/__tests__/zones.test.js.map +1 -0
  727. package/packages/sourcevision/dist/analyzers/archetypes.d.ts +18 -0
  728. package/packages/sourcevision/dist/analyzers/archetypes.js +272 -0
  729. package/packages/sourcevision/dist/analyzers/archetypes.js.map +1 -0
  730. package/packages/sourcevision/dist/analyzers/branch-work-classifier.d.ts +67 -0
  731. package/packages/sourcevision/dist/analyzers/branch-work-classifier.js +202 -0
  732. package/packages/sourcevision/dist/analyzers/branch-work-classifier.js.map +1 -0
  733. package/packages/sourcevision/dist/analyzers/branch-work-collector.d.ts +121 -0
  734. package/packages/sourcevision/dist/analyzers/branch-work-collector.js +301 -0
  735. package/packages/sourcevision/dist/analyzers/branch-work-collector.js.map +1 -0
  736. package/packages/sourcevision/dist/analyzers/branch-work-filter.d.ts +112 -0
  737. package/packages/sourcevision/dist/analyzers/branch-work-filter.js +285 -0
  738. package/packages/sourcevision/dist/analyzers/branch-work-filter.js.map +1 -0
  739. package/packages/sourcevision/dist/analyzers/branch-work-store.d.ts +65 -0
  740. package/packages/sourcevision/dist/analyzers/branch-work-store.js +127 -0
  741. package/packages/sourcevision/dist/analyzers/branch-work-store.js.map +1 -0
  742. package/packages/sourcevision/dist/analyzers/callgraph-findings.d.ts +26 -0
  743. package/packages/sourcevision/dist/analyzers/callgraph-findings.js +581 -0
  744. package/packages/sourcevision/dist/analyzers/callgraph-findings.js.map +1 -0
  745. package/packages/sourcevision/dist/analyzers/callgraph.d.ts +64 -0
  746. package/packages/sourcevision/dist/analyzers/callgraph.js +659 -0
  747. package/packages/sourcevision/dist/analyzers/callgraph.js.map +1 -0
  748. package/packages/sourcevision/dist/analyzers/classify.d.ts +45 -0
  749. package/packages/sourcevision/dist/analyzers/classify.js +431 -0
  750. package/packages/sourcevision/dist/analyzers/classify.js.map +1 -0
  751. package/packages/sourcevision/dist/analyzers/claude-cli.d.ts +29 -0
  752. package/packages/sourcevision/dist/analyzers/claude-cli.js +137 -0
  753. package/packages/sourcevision/dist/analyzers/claude-cli.js.map +1 -0
  754. package/packages/sourcevision/dist/analyzers/claude-client.d.ts +47 -0
  755. package/packages/sourcevision/dist/analyzers/claude-client.js +112 -0
  756. package/packages/sourcevision/dist/analyzers/claude-client.js.map +1 -0
  757. package/packages/sourcevision/dist/analyzers/completion-reader.d.ts +218 -0
  758. package/packages/sourcevision/dist/analyzers/completion-reader.js +355 -0
  759. package/packages/sourcevision/dist/analyzers/completion-reader.js.map +1 -0
  760. package/packages/sourcevision/dist/analyzers/components.d.ts +18 -0
  761. package/packages/sourcevision/dist/analyzers/components.js +598 -0
  762. package/packages/sourcevision/dist/analyzers/components.js.map +1 -0
  763. package/packages/sourcevision/dist/analyzers/context.d.ts +6 -0
  764. package/packages/sourcevision/dist/analyzers/context.js +175 -0
  765. package/packages/sourcevision/dist/analyzers/context.js.map +1 -0
  766. package/packages/sourcevision/dist/analyzers/convergence.d.ts +74 -0
  767. package/packages/sourcevision/dist/analyzers/convergence.js +144 -0
  768. package/packages/sourcevision/dist/analyzers/convergence.js.map +1 -0
  769. package/packages/sourcevision/dist/analyzers/enrich-batch.d.ts +47 -0
  770. package/packages/sourcevision/dist/analyzers/enrich-batch.js +340 -0
  771. package/packages/sourcevision/dist/analyzers/enrich-batch.js.map +1 -0
  772. package/packages/sourcevision/dist/analyzers/enrich-config.d.ts +41 -0
  773. package/packages/sourcevision/dist/analyzers/enrich-config.js +215 -0
  774. package/packages/sourcevision/dist/analyzers/enrich-config.js.map +1 -0
  775. package/packages/sourcevision/dist/analyzers/enrich-parsing.d.ts +58 -0
  776. package/packages/sourcevision/dist/analyzers/enrich-parsing.js +401 -0
  777. package/packages/sourcevision/dist/analyzers/enrich-parsing.js.map +1 -0
  778. package/packages/sourcevision/dist/analyzers/enrich-per-zone.d.ts +27 -0
  779. package/packages/sourcevision/dist/analyzers/enrich-per-zone.js +287 -0
  780. package/packages/sourcevision/dist/analyzers/enrich-per-zone.js.map +1 -0
  781. package/packages/sourcevision/dist/analyzers/enrich.d.ts +25 -0
  782. package/packages/sourcevision/dist/analyzers/enrich.js +255 -0
  783. package/packages/sourcevision/dist/analyzers/enrich.js.map +1 -0
  784. package/packages/sourcevision/dist/analyzers/imports.d.ts +18 -0
  785. package/packages/sourcevision/dist/analyzers/imports.js +448 -0
  786. package/packages/sourcevision/dist/analyzers/imports.js.map +1 -0
  787. package/packages/sourcevision/dist/analyzers/index.d.ts +12 -0
  788. package/packages/sourcevision/dist/analyzers/index.js +10 -0
  789. package/packages/sourcevision/dist/analyzers/index.js.map +1 -0
  790. package/packages/sourcevision/dist/analyzers/inventory.d.ts +33 -0
  791. package/packages/sourcevision/dist/analyzers/inventory.js +594 -0
  792. package/packages/sourcevision/dist/analyzers/inventory.js.map +1 -0
  793. package/packages/sourcevision/dist/analyzers/llms-txt.d.ts +6 -0
  794. package/packages/sourcevision/dist/analyzers/llms-txt.js +268 -0
  795. package/packages/sourcevision/dist/analyzers/llms-txt.js.map +1 -0
  796. package/packages/sourcevision/dist/analyzers/louvain.d.ts +123 -0
  797. package/packages/sourcevision/dist/analyzers/louvain.js +669 -0
  798. package/packages/sourcevision/dist/analyzers/louvain.js.map +1 -0
  799. package/packages/sourcevision/dist/analyzers/manifest.d.ts +8 -0
  800. package/packages/sourcevision/dist/analyzers/manifest.js +72 -0
  801. package/packages/sourcevision/dist/analyzers/manifest.js.map +1 -0
  802. package/packages/sourcevision/dist/analyzers/move-recommendations.d.ts +41 -0
  803. package/packages/sourcevision/dist/analyzers/move-recommendations.js +193 -0
  804. package/packages/sourcevision/dist/analyzers/move-recommendations.js.map +1 -0
  805. package/packages/sourcevision/dist/analyzers/next-steps.d.ts +10 -0
  806. package/packages/sourcevision/dist/analyzers/next-steps.js +228 -0
  807. package/packages/sourcevision/dist/analyzers/next-steps.js.map +1 -0
  808. package/packages/sourcevision/dist/analyzers/risk-scoring.d.ts +120 -0
  809. package/packages/sourcevision/dist/analyzers/risk-scoring.js +266 -0
  810. package/packages/sourcevision/dist/analyzers/risk-scoring.js.map +1 -0
  811. package/packages/sourcevision/dist/analyzers/route-detection.d.ts +29 -0
  812. package/packages/sourcevision/dist/analyzers/route-detection.js +316 -0
  813. package/packages/sourcevision/dist/analyzers/route-detection.js.map +1 -0
  814. package/packages/sourcevision/dist/analyzers/server-route-detection.d.ts +35 -0
  815. package/packages/sourcevision/dist/analyzers/server-route-detection.js +210 -0
  816. package/packages/sourcevision/dist/analyzers/server-route-detection.js.map +1 -0
  817. package/packages/sourcevision/dist/analyzers/token-usage.d.ts +11 -0
  818. package/packages/sourcevision/dist/analyzers/token-usage.js +41 -0
  819. package/packages/sourcevision/dist/analyzers/token-usage.js.map +1 -0
  820. package/packages/sourcevision/dist/analyzers/workspace-aggregate.d.ts +80 -0
  821. package/packages/sourcevision/dist/analyzers/workspace-aggregate.js +386 -0
  822. package/packages/sourcevision/dist/analyzers/workspace-aggregate.js.map +1 -0
  823. package/packages/sourcevision/dist/analyzers/workspace-crossings.d.ts +63 -0
  824. package/packages/sourcevision/dist/analyzers/workspace-crossings.js +239 -0
  825. package/packages/sourcevision/dist/analyzers/workspace-crossings.js.map +1 -0
  826. package/packages/sourcevision/dist/analyzers/workspace.d.ts +65 -0
  827. package/packages/sourcevision/dist/analyzers/workspace.js +243 -0
  828. package/packages/sourcevision/dist/analyzers/workspace.js.map +1 -0
  829. package/packages/sourcevision/dist/analyzers/zone-hash.d.ts +15 -0
  830. package/packages/sourcevision/dist/analyzers/zone-hash.js +23 -0
  831. package/packages/sourcevision/dist/analyzers/zone-hash.js.map +1 -0
  832. package/packages/sourcevision/dist/analyzers/zone-output.d.ts +20 -0
  833. package/packages/sourcevision/dist/analyzers/zone-output.js +252 -0
  834. package/packages/sourcevision/dist/analyzers/zone-output.js.map +1 -0
  835. package/packages/sourcevision/dist/analyzers/zones.d.ts +224 -0
  836. package/packages/sourcevision/dist/analyzers/zones.js +1538 -0
  837. package/packages/sourcevision/dist/analyzers/zones.js.map +1 -0
  838. package/packages/sourcevision/dist/cli/commands/analyze-phases.d.ts +48 -0
  839. package/packages/sourcevision/dist/cli/commands/analyze-phases.js +496 -0
  840. package/packages/sourcevision/dist/cli/commands/analyze-phases.js.map +1 -0
  841. package/packages/sourcevision/dist/cli/commands/analyze.d.ts +13 -0
  842. package/packages/sourcevision/dist/cli/commands/analyze.js +332 -0
  843. package/packages/sourcevision/dist/cli/commands/analyze.js.map +1 -0
  844. package/packages/sourcevision/dist/cli/commands/constants.d.ts +2 -0
  845. package/packages/sourcevision/dist/cli/commands/constants.js +34 -0
  846. package/packages/sourcevision/dist/cli/commands/constants.js.map +1 -0
  847. package/packages/sourcevision/dist/cli/commands/export-pdf.d.ts +19 -0
  848. package/packages/sourcevision/dist/cli/commands/export-pdf.js +73 -0
  849. package/packages/sourcevision/dist/cli/commands/export-pdf.js.map +1 -0
  850. package/packages/sourcevision/dist/cli/commands/git-credential-helper.d.ts +2 -0
  851. package/packages/sourcevision/dist/cli/commands/git-credential-helper.js +59 -0
  852. package/packages/sourcevision/dist/cli/commands/git-credential-helper.js.map +1 -0
  853. package/packages/sourcevision/dist/cli/commands/init.d.ts +2 -0
  854. package/packages/sourcevision/dist/cli/commands/init.js +55 -0
  855. package/packages/sourcevision/dist/cli/commands/init.js.map +1 -0
  856. package/packages/sourcevision/dist/cli/commands/pr-markdown.d.ts +72 -0
  857. package/packages/sourcevision/dist/cli/commands/pr-markdown.js +121 -0
  858. package/packages/sourcevision/dist/cli/commands/pr-markdown.js.map +1 -0
  859. package/packages/sourcevision/dist/cli/commands/prd-epic-resolver.d.ts +45 -0
  860. package/packages/sourcevision/dist/cli/commands/prd-epic-resolver.js +220 -0
  861. package/packages/sourcevision/dist/cli/commands/prd-epic-resolver.js.map +1 -0
  862. package/packages/sourcevision/dist/cli/commands/reset.d.ts +1 -0
  863. package/packages/sourcevision/dist/cli/commands/reset.js +54 -0
  864. package/packages/sourcevision/dist/cli/commands/reset.js.map +1 -0
  865. package/packages/sourcevision/dist/cli/commands/validate.d.ts +1 -0
  866. package/packages/sourcevision/dist/cli/commands/validate.js +53 -0
  867. package/packages/sourcevision/dist/cli/commands/validate.js.map +1 -0
  868. package/packages/sourcevision/dist/cli/commands/workspace.d.ts +19 -0
  869. package/packages/sourcevision/dist/cli/commands/workspace.js +139 -0
  870. package/packages/sourcevision/dist/cli/commands/workspace.js.map +1 -0
  871. package/packages/sourcevision/dist/cli/errors.d.ts +31 -0
  872. package/packages/sourcevision/dist/cli/errors.js +100 -0
  873. package/packages/sourcevision/dist/cli/errors.js.map +1 -0
  874. package/packages/sourcevision/dist/cli/help.d.ts +23 -0
  875. package/packages/sourcevision/dist/cli/help.js +241 -0
  876. package/packages/sourcevision/dist/cli/help.js.map +1 -0
  877. package/packages/sourcevision/dist/cli/index.d.ts +15 -0
  878. package/packages/sourcevision/dist/cli/index.js +127 -0
  879. package/packages/sourcevision/dist/cli/index.js.map +1 -0
  880. package/packages/sourcevision/dist/cli/mcp.d.ts +13 -0
  881. package/packages/sourcevision/dist/cli/mcp.js +433 -0
  882. package/packages/sourcevision/dist/cli/mcp.js.map +1 -0
  883. package/packages/sourcevision/dist/cli/output.d.ts +19 -0
  884. package/packages/sourcevision/dist/cli/output.js +48 -0
  885. package/packages/sourcevision/dist/cli/output.js.map +1 -0
  886. package/packages/sourcevision/dist/cli/serve.d.ts +11 -0
  887. package/packages/sourcevision/dist/cli/serve.js +41 -0
  888. package/packages/sourcevision/dist/cli/serve.js.map +1 -0
  889. package/packages/sourcevision/dist/cli/server/index.d.ts +19 -0
  890. package/packages/sourcevision/dist/cli/server/index.js +17 -0
  891. package/packages/sourcevision/dist/cli/server/index.js.map +1 -0
  892. package/packages/sourcevision/dist/cli/server/routes-data.d.ts +14 -0
  893. package/packages/sourcevision/dist/cli/server/routes-data.js +122 -0
  894. package/packages/sourcevision/dist/cli/server/routes-data.js.map +1 -0
  895. package/packages/sourcevision/dist/cli/server/routes-hench.d.ts +12 -0
  896. package/packages/sourcevision/dist/cli/server/routes-hench.js +100 -0
  897. package/packages/sourcevision/dist/cli/server/routes-hench.js.map +1 -0
  898. package/packages/sourcevision/dist/cli/server/routes-rex.d.ts +23 -0
  899. package/packages/sourcevision/dist/cli/server/routes-rex.js +817 -0
  900. package/packages/sourcevision/dist/cli/server/routes-rex.js.map +1 -0
  901. package/packages/sourcevision/dist/cli/server/routes-sourcevision.d.ts +17 -0
  902. package/packages/sourcevision/dist/cli/server/routes-sourcevision.js +145 -0
  903. package/packages/sourcevision/dist/cli/server/routes-sourcevision.js.map +1 -0
  904. package/packages/sourcevision/dist/cli/server/routes-static.d.ts +17 -0
  905. package/packages/sourcevision/dist/cli/server/routes-static.js +88 -0
  906. package/packages/sourcevision/dist/cli/server/routes-static.js.map +1 -0
  907. package/packages/sourcevision/dist/cli/server/routes-token-usage.d.ts +18 -0
  908. package/packages/sourcevision/dist/cli/server/routes-token-usage.js +349 -0
  909. package/packages/sourcevision/dist/cli/server/routes-token-usage.js.map +1 -0
  910. package/packages/sourcevision/dist/cli/server/routes-validation.d.ts +10 -0
  911. package/packages/sourcevision/dist/cli/server/routes-validation.js +395 -0
  912. package/packages/sourcevision/dist/cli/server/routes-validation.js.map +1 -0
  913. package/packages/sourcevision/dist/cli/server/start.d.ts +7 -0
  914. package/packages/sourcevision/dist/cli/server/start.js +166 -0
  915. package/packages/sourcevision/dist/cli/server/start.js.map +1 -0
  916. package/packages/sourcevision/dist/cli/server/types.d.ts +23 -0
  917. package/packages/sourcevision/dist/cli/server/types.js +26 -0
  918. package/packages/sourcevision/dist/cli/server/types.js.map +1 -0
  919. package/packages/sourcevision/dist/cli/server/websocket.d.ts +31 -0
  920. package/packages/sourcevision/dist/cli/server/websocket.js +247 -0
  921. package/packages/sourcevision/dist/cli/server/websocket.js.map +1 -0
  922. package/packages/sourcevision/dist/constants.d.ts +4 -0
  923. package/packages/sourcevision/dist/constants.js +6 -0
  924. package/packages/sourcevision/dist/constants.js.map +1 -0
  925. package/packages/sourcevision/dist/export/pdf-report.d.ts +27 -0
  926. package/packages/sourcevision/dist/export/pdf-report.js +447 -0
  927. package/packages/sourcevision/dist/export/pdf-report.js.map +1 -0
  928. package/packages/sourcevision/dist/generators/pr-markdown-template.d.ts +56 -0
  929. package/packages/sourcevision/dist/generators/pr-markdown-template.js +264 -0
  930. package/packages/sourcevision/dist/generators/pr-markdown-template.js.map +1 -0
  931. package/packages/sourcevision/dist/public.d.ts +41 -0
  932. package/packages/sourcevision/dist/public.js +43 -0
  933. package/packages/sourcevision/dist/public.js.map +1 -0
  934. package/packages/sourcevision/dist/schema/data-files.d.ts +11 -0
  935. package/packages/sourcevision/dist/schema/data-files.js +12 -0
  936. package/packages/sourcevision/dist/schema/data-files.js.map +1 -0
  937. package/packages/sourcevision/dist/schema/index.d.ts +3 -0
  938. package/packages/sourcevision/dist/schema/index.js +3 -0
  939. package/packages/sourcevision/dist/schema/index.js.map +1 -0
  940. package/packages/sourcevision/dist/schema/v1.d.ts +550 -0
  941. package/packages/sourcevision/dist/schema/v1.js +3 -0
  942. package/packages/sourcevision/dist/schema/v1.js.map +1 -0
  943. package/packages/sourcevision/dist/schema/validate.d.ts +1243 -0
  944. package/packages/sourcevision/dist/schema/validate.js +411 -0
  945. package/packages/sourcevision/dist/schema/validate.js.map +1 -0
  946. package/packages/sourcevision/dist/util/__tests__/merge.test.d.ts +1 -0
  947. package/packages/sourcevision/dist/util/__tests__/merge.test.js +122 -0
  948. package/packages/sourcevision/dist/util/__tests__/merge.test.js.map +1 -0
  949. package/packages/sourcevision/dist/util/__tests__/sort.test.d.ts +1 -0
  950. package/packages/sourcevision/dist/util/__tests__/sort.test.js +151 -0
  951. package/packages/sourcevision/dist/util/__tests__/sort.test.js.map +1 -0
  952. package/packages/sourcevision/dist/util/merge.d.ts +18 -0
  953. package/packages/sourcevision/dist/util/merge.js +152 -0
  954. package/packages/sourcevision/dist/util/merge.js.map +1 -0
  955. package/packages/sourcevision/dist/util/paths.d.ts +2 -0
  956. package/packages/sourcevision/dist/util/paths.js +5 -0
  957. package/packages/sourcevision/dist/util/paths.js.map +1 -0
  958. package/packages/sourcevision/dist/util/project-config.d.ts +29 -0
  959. package/packages/sourcevision/dist/util/project-config.js +49 -0
  960. package/packages/sourcevision/dist/util/project-config.js.map +1 -0
  961. package/packages/sourcevision/dist/util/sort.d.ts +31 -0
  962. package/packages/sourcevision/dist/util/sort.js +149 -0
  963. package/packages/sourcevision/dist/util/sort.js.map +1 -0
  964. package/packages/sourcevision/dist/viewer/Hench-F.png +0 -0
  965. package/packages/sourcevision/dist/viewer/Rex-F.png +0 -0
  966. package/packages/sourcevision/dist/viewer/SourceVision-F.png +0 -0
  967. package/packages/sourcevision/dist/viewer/SourceVision.png +0 -0
  968. package/packages/sourcevision/dist/viewer/components/collapsible-section.d.ts +12 -0
  969. package/packages/sourcevision/dist/viewer/components/collapsible-section.js +40 -0
  970. package/packages/sourcevision/dist/viewer/components/collapsible-section.js.map +1 -0
  971. package/packages/sourcevision/dist/viewer/components/constants.d.ts +6 -0
  972. package/packages/sourcevision/dist/viewer/components/constants.js +16 -0
  973. package/packages/sourcevision/dist/viewer/components/constants.js.map +1 -0
  974. package/packages/sourcevision/dist/viewer/components/data-display/collapsible-section.d.ts +12 -0
  975. package/packages/sourcevision/dist/viewer/components/data-display/collapsible-section.js +40 -0
  976. package/packages/sourcevision/dist/viewer/components/data-display/collapsible-section.js.map +1 -0
  977. package/packages/sourcevision/dist/viewer/components/data-display/findings-list.d.ts +13 -0
  978. package/packages/sourcevision/dist/viewer/components/data-display/findings-list.js +136 -0
  979. package/packages/sourcevision/dist/viewer/components/data-display/findings-list.js.map +1 -0
  980. package/packages/sourcevision/dist/viewer/components/data-display/health-gauge.d.ts +47 -0
  981. package/packages/sourcevision/dist/viewer/components/data-display/health-gauge.js +70 -0
  982. package/packages/sourcevision/dist/viewer/components/data-display/health-gauge.js.map +1 -0
  983. package/packages/sourcevision/dist/viewer/components/data-display/mini-charts.d.ts +36 -0
  984. package/packages/sourcevision/dist/viewer/components/data-display/mini-charts.js +124 -0
  985. package/packages/sourcevision/dist/viewer/components/data-display/mini-charts.js.map +1 -0
  986. package/packages/sourcevision/dist/viewer/components/data-display/tree-view.d.ts +18 -0
  987. package/packages/sourcevision/dist/viewer/components/data-display/tree-view.js +107 -0
  988. package/packages/sourcevision/dist/viewer/components/data-display/tree-view.js.map +1 -0
  989. package/packages/sourcevision/dist/viewer/components/data-display/zone-map.d.ts +28 -0
  990. package/packages/sourcevision/dist/viewer/components/data-display/zone-map.js +195 -0
  991. package/packages/sourcevision/dist/viewer/components/data-display/zone-map.js.map +1 -0
  992. package/packages/sourcevision/dist/viewer/components/detail-panel.d.ts +12 -0
  993. package/packages/sourcevision/dist/viewer/components/detail-panel.js +166 -0
  994. package/packages/sourcevision/dist/viewer/components/detail-panel.js.map +1 -0
  995. package/packages/sourcevision/dist/viewer/components/faq.d.ts +1 -0
  996. package/packages/sourcevision/dist/viewer/components/faq.js +162 -0
  997. package/packages/sourcevision/dist/viewer/components/faq.js.map +1 -0
  998. package/packages/sourcevision/dist/viewer/components/findings-list.d.ts +13 -0
  999. package/packages/sourcevision/dist/viewer/components/findings-list.js +136 -0
  1000. package/packages/sourcevision/dist/viewer/components/findings-list.js.map +1 -0
  1001. package/packages/sourcevision/dist/viewer/components/guide.d.ts +5 -0
  1002. package/packages/sourcevision/dist/viewer/components/guide.js +77 -0
  1003. package/packages/sourcevision/dist/viewer/components/guide.js.map +1 -0
  1004. package/packages/sourcevision/dist/viewer/components/health-gauge.d.ts +47 -0
  1005. package/packages/sourcevision/dist/viewer/components/health-gauge.js +70 -0
  1006. package/packages/sourcevision/dist/viewer/components/health-gauge.js.map +1 -0
  1007. package/packages/sourcevision/dist/viewer/components/logos.d.ts +103 -0
  1008. package/packages/sourcevision/dist/viewer/components/logos.js +148 -0
  1009. package/packages/sourcevision/dist/viewer/components/logos.js.map +1 -0
  1010. package/packages/sourcevision/dist/viewer/components/mini-charts.d.ts +36 -0
  1011. package/packages/sourcevision/dist/viewer/components/mini-charts.js +124 -0
  1012. package/packages/sourcevision/dist/viewer/components/mini-charts.js.map +1 -0
  1013. package/packages/sourcevision/dist/viewer/components/prd-tree/add-item-form.d.ts +31 -0
  1014. package/packages/sourcevision/dist/viewer/components/prd-tree/add-item-form.js +209 -0
  1015. package/packages/sourcevision/dist/viewer/components/prd-tree/add-item-form.js.map +1 -0
  1016. package/packages/sourcevision/dist/viewer/components/prd-tree/analyze-panel.d.ts +13 -0
  1017. package/packages/sourcevision/dist/viewer/components/prd-tree/analyze-panel.js +225 -0
  1018. package/packages/sourcevision/dist/viewer/components/prd-tree/analyze-panel.js.map +1 -0
  1019. package/packages/sourcevision/dist/viewer/components/prd-tree/bulk-actions.d.ts +17 -0
  1020. package/packages/sourcevision/dist/viewer/components/prd-tree/bulk-actions.js +80 -0
  1021. package/packages/sourcevision/dist/viewer/components/prd-tree/bulk-actions.js.map +1 -0
  1022. package/packages/sourcevision/dist/viewer/components/prd-tree/compute.d.ts +28 -0
  1023. package/packages/sourcevision/dist/viewer/components/prd-tree/compute.js +116 -0
  1024. package/packages/sourcevision/dist/viewer/components/prd-tree/compute.js.map +1 -0
  1025. package/packages/sourcevision/dist/viewer/components/prd-tree/index.d.ts +14 -0
  1026. package/packages/sourcevision/dist/viewer/components/prd-tree/index.js +8 -0
  1027. package/packages/sourcevision/dist/viewer/components/prd-tree/index.js.map +1 -0
  1028. package/packages/sourcevision/dist/viewer/components/prd-tree/prd-tree.d.ts +21 -0
  1029. package/packages/sourcevision/dist/viewer/components/prd-tree/prd-tree.js +293 -0
  1030. package/packages/sourcevision/dist/viewer/components/prd-tree/prd-tree.js.map +1 -0
  1031. package/packages/sourcevision/dist/viewer/components/prd-tree/status-filter.d.ts +40 -0
  1032. package/packages/sourcevision/dist/viewer/components/prd-tree/status-filter.js +129 -0
  1033. package/packages/sourcevision/dist/viewer/components/prd-tree/status-filter.js.map +1 -0
  1034. package/packages/sourcevision/dist/viewer/components/prd-tree/task-detail.d.ts +18 -0
  1035. package/packages/sourcevision/dist/viewer/components/prd-tree/task-detail.js +221 -0
  1036. package/packages/sourcevision/dist/viewer/components/prd-tree/task-detail.js.map +1 -0
  1037. package/packages/sourcevision/dist/viewer/components/prd-tree/types.d.ts +45 -0
  1038. package/packages/sourcevision/dist/viewer/components/prd-tree/types.js +15 -0
  1039. package/packages/sourcevision/dist/viewer/components/prd-tree/types.js.map +1 -0
  1040. package/packages/sourcevision/dist/viewer/components/rex-task-link.d.ts +48 -0
  1041. package/packages/sourcevision/dist/viewer/components/rex-task-link.js +191 -0
  1042. package/packages/sourcevision/dist/viewer/components/rex-task-link.js.map +1 -0
  1043. package/packages/sourcevision/dist/viewer/components/search-filter.d.ts +20 -0
  1044. package/packages/sourcevision/dist/viewer/components/search-filter.js +28 -0
  1045. package/packages/sourcevision/dist/viewer/components/search-filter.js.map +1 -0
  1046. package/packages/sourcevision/dist/viewer/components/sidebar.d.ts +16 -0
  1047. package/packages/sourcevision/dist/viewer/components/sidebar.js +296 -0
  1048. package/packages/sourcevision/dist/viewer/components/sidebar.js.map +1 -0
  1049. package/packages/sourcevision/dist/viewer/components/theme-toggle.d.ts +14 -0
  1050. package/packages/sourcevision/dist/viewer/components/theme-toggle.js +37 -0
  1051. package/packages/sourcevision/dist/viewer/components/theme-toggle.js.map +1 -0
  1052. package/packages/sourcevision/dist/viewer/components/tree-view.d.ts +18 -0
  1053. package/packages/sourcevision/dist/viewer/components/tree-view.js +107 -0
  1054. package/packages/sourcevision/dist/viewer/components/tree-view.js.map +1 -0
  1055. package/packages/sourcevision/dist/viewer/components/zone-map.d.ts +28 -0
  1056. package/packages/sourcevision/dist/viewer/components/zone-map.js +195 -0
  1057. package/packages/sourcevision/dist/viewer/components/zone-map.js.map +1 -0
  1058. package/packages/sourcevision/dist/viewer/graph/physics.d.ts +70 -0
  1059. package/packages/sourcevision/dist/viewer/graph/physics.js +260 -0
  1060. package/packages/sourcevision/dist/viewer/graph/physics.js.map +1 -0
  1061. package/packages/sourcevision/dist/viewer/graph/renderer.d.ts +69 -0
  1062. package/packages/sourcevision/dist/viewer/graph/renderer.js +423 -0
  1063. package/packages/sourcevision/dist/viewer/graph/renderer.js.map +1 -0
  1064. package/packages/sourcevision/dist/viewer/index.html +27 -0
  1065. package/packages/sourcevision/dist/viewer/loader.d.ts +20 -0
  1066. package/packages/sourcevision/dist/viewer/loader.js +142 -0
  1067. package/packages/sourcevision/dist/viewer/loader.js.map +1 -0
  1068. package/packages/sourcevision/dist/viewer/main.d.ts +1 -0
  1069. package/packages/sourcevision/dist/viewer/main.js +234 -0
  1070. package/packages/sourcevision/dist/viewer/main.js.map +1 -0
  1071. package/packages/sourcevision/dist/viewer/n-dx.png +0 -0
  1072. package/packages/sourcevision/dist/viewer/schema-compat.d.ts +17 -0
  1073. package/packages/sourcevision/dist/viewer/schema-compat.js +47 -0
  1074. package/packages/sourcevision/dist/viewer/schema-compat.js.map +1 -0
  1075. package/packages/sourcevision/dist/viewer/styles.css +2052 -0
  1076. package/packages/sourcevision/dist/viewer/types.d.ts +63 -0
  1077. package/packages/sourcevision/dist/viewer/types.js +2 -0
  1078. package/packages/sourcevision/dist/viewer/types.js.map +1 -0
  1079. package/packages/sourcevision/dist/viewer/utils.d.ts +23 -0
  1080. package/packages/sourcevision/dist/viewer/utils.js +49 -0
  1081. package/packages/sourcevision/dist/viewer/utils.js.map +1 -0
  1082. package/packages/sourcevision/dist/viewer/views/analysis.d.ts +10 -0
  1083. package/packages/sourcevision/dist/viewer/views/analysis.js +87 -0
  1084. package/packages/sourcevision/dist/viewer/views/analysis.js.map +1 -0
  1085. package/packages/sourcevision/dist/viewer/views/architecture.d.ts +10 -0
  1086. package/packages/sourcevision/dist/viewer/views/architecture.js +75 -0
  1087. package/packages/sourcevision/dist/viewer/views/architecture.js.map +1 -0
  1088. package/packages/sourcevision/dist/viewer/views/files.d.ts +13 -0
  1089. package/packages/sourcevision/dist/viewer/views/files.js +162 -0
  1090. package/packages/sourcevision/dist/viewer/views/files.js.map +1 -0
  1091. package/packages/sourcevision/dist/viewer/views/graph.d.ts +11 -0
  1092. package/packages/sourcevision/dist/viewer/views/graph.js +130 -0
  1093. package/packages/sourcevision/dist/viewer/views/graph.js.map +1 -0
  1094. package/packages/sourcevision/dist/viewer/views/hench-runs.d.ts +17 -0
  1095. package/packages/sourcevision/dist/viewer/views/hench-runs.js +336 -0
  1096. package/packages/sourcevision/dist/viewer/views/hench-runs.js.map +1 -0
  1097. package/packages/sourcevision/dist/viewer/views/overview.d.ts +10 -0
  1098. package/packages/sourcevision/dist/viewer/views/overview.js +230 -0
  1099. package/packages/sourcevision/dist/viewer/views/overview.js.map +1 -0
  1100. package/packages/sourcevision/dist/viewer/views/prd.d.ts +21 -0
  1101. package/packages/sourcevision/dist/viewer/views/prd.js +201 -0
  1102. package/packages/sourcevision/dist/viewer/views/prd.js.map +1 -0
  1103. package/packages/sourcevision/dist/viewer/views/problems.d.ts +8 -0
  1104. package/packages/sourcevision/dist/viewer/views/problems.js +51 -0
  1105. package/packages/sourcevision/dist/viewer/views/problems.js.map +1 -0
  1106. package/packages/sourcevision/dist/viewer/views/rex-dashboard.d.ts +14 -0
  1107. package/packages/sourcevision/dist/viewer/views/rex-dashboard.js +229 -0
  1108. package/packages/sourcevision/dist/viewer/views/rex-dashboard.js.map +1 -0
  1109. package/packages/sourcevision/dist/viewer/views/routes.d.ts +8 -0
  1110. package/packages/sourcevision/dist/viewer/views/routes.js +218 -0
  1111. package/packages/sourcevision/dist/viewer/views/routes.js.map +1 -0
  1112. package/packages/sourcevision/dist/viewer/views/suggestions.d.ts +8 -0
  1113. package/packages/sourcevision/dist/viewer/views/suggestions.js +36 -0
  1114. package/packages/sourcevision/dist/viewer/views/suggestions.js.map +1 -0
  1115. package/packages/sourcevision/dist/viewer/views/token-usage.d.ts +10 -0
  1116. package/packages/sourcevision/dist/viewer/views/token-usage.js +384 -0
  1117. package/packages/sourcevision/dist/viewer/views/token-usage.js.map +1 -0
  1118. package/packages/sourcevision/dist/viewer/views/validation.d.ts +8 -0
  1119. package/packages/sourcevision/dist/viewer/views/validation.js +470 -0
  1120. package/packages/sourcevision/dist/viewer/views/validation.js.map +1 -0
  1121. package/packages/sourcevision/dist/viewer/views/zones.d.ts +11 -0
  1122. package/packages/sourcevision/dist/viewer/views/zones.js +146 -0
  1123. package/packages/sourcevision/dist/viewer/views/zones.js.map +1 -0
  1124. package/packages/sourcevision/package.json +43 -0
  1125. package/packages/web/build.js +243 -0
  1126. package/packages/web/dist/cli/index.d.ts +8 -0
  1127. package/packages/web/dist/cli/index.js +50 -0
  1128. package/packages/web/dist/cli/index.js.map +1 -0
  1129. package/packages/web/dist/landing/color-inversion.d.ts +7 -0
  1130. package/packages/web/dist/landing/color-inversion.js +24 -0
  1131. package/packages/web/dist/landing/color-inversion.js.map +1 -0
  1132. package/packages/web/dist/landing/index.html +325 -0
  1133. package/packages/web/dist/landing/landing.d.ts +38 -0
  1134. package/packages/web/dist/landing/landing.js +299 -0
  1135. package/packages/web/dist/landing/landing.js.map +1 -0
  1136. package/packages/web/dist/public.d.ts +55 -0
  1137. package/packages/web/dist/public.js +51 -0
  1138. package/packages/web/dist/public.js.map +1 -0
  1139. package/packages/web/dist/schema/data-files.d.ts +10 -0
  1140. package/packages/web/dist/schema/data-files.js +11 -0
  1141. package/packages/web/dist/schema/data-files.js.map +1 -0
  1142. package/packages/web/dist/schema/features.d.ts +28 -0
  1143. package/packages/web/dist/schema/features.js +9 -0
  1144. package/packages/web/dist/schema/features.js.map +1 -0
  1145. package/packages/web/dist/schema/v1.d.ts +317 -0
  1146. package/packages/web/dist/schema/v1.js +3 -0
  1147. package/packages/web/dist/schema/v1.js.map +1 -0
  1148. package/packages/web/dist/schema/validate.d.ts +15 -0
  1149. package/packages/web/dist/schema/validate.js +260 -0
  1150. package/packages/web/dist/schema/validate.js.map +1 -0
  1151. package/packages/web/dist/server/aggregation-cache.d.ts +105 -0
  1152. package/packages/web/dist/server/aggregation-cache.js +163 -0
  1153. package/packages/web/dist/server/aggregation-cache.js.map +1 -0
  1154. package/packages/web/dist/server/concurrent-execution-metrics.d.ts +103 -0
  1155. package/packages/web/dist/server/concurrent-execution-metrics.js +253 -0
  1156. package/packages/web/dist/server/concurrent-execution-metrics.js.map +1 -0
  1157. package/packages/web/dist/server/domain-gateway.d.ts +18 -0
  1158. package/packages/web/dist/server/domain-gateway.js +19 -0
  1159. package/packages/web/dist/server/domain-gateway.js.map +1 -0
  1160. package/packages/web/dist/server/incremental-task-usage.d.ts +92 -0
  1161. package/packages/web/dist/server/incremental-task-usage.js +251 -0
  1162. package/packages/web/dist/server/incremental-task-usage.js.map +1 -0
  1163. package/packages/web/dist/server/index.d.ts +39 -0
  1164. package/packages/web/dist/server/index.js +36 -0
  1165. package/packages/web/dist/server/index.js.map +1 -0
  1166. package/packages/web/dist/server/mcp-deps.d.ts +6 -0
  1167. package/packages/web/dist/server/mcp-deps.js +7 -0
  1168. package/packages/web/dist/server/mcp-deps.js.map +1 -0
  1169. package/packages/web/dist/server/port.d.ts +96 -0
  1170. package/packages/web/dist/server/port.js +134 -0
  1171. package/packages/web/dist/server/port.js.map +1 -0
  1172. package/packages/web/dist/server/pr-markdown-refresh-diagnostics.d.ts +59 -0
  1173. package/packages/web/dist/server/pr-markdown-refresh-diagnostics.js +429 -0
  1174. package/packages/web/dist/server/pr-markdown-refresh-diagnostics.js.map +1 -0
  1175. package/packages/web/dist/server/prd-io.d.ts +40 -0
  1176. package/packages/web/dist/server/prd-io.js +66 -0
  1177. package/packages/web/dist/server/prd-io.js.map +1 -0
  1178. package/packages/web/dist/server/process-memory-tracker.d.ts +79 -0
  1179. package/packages/web/dist/server/process-memory-tracker.js +194 -0
  1180. package/packages/web/dist/server/process-memory-tracker.js.map +1 -0
  1181. package/packages/web/dist/server/register-scheduler.d.ts +53 -0
  1182. package/packages/web/dist/server/register-scheduler.js +36 -0
  1183. package/packages/web/dist/server/register-scheduler.js.map +1 -0
  1184. package/packages/web/dist/server/rex-domain.d.ts +55 -0
  1185. package/packages/web/dist/server/rex-domain.js +84 -0
  1186. package/packages/web/dist/server/rex-domain.js.map +1 -0
  1187. package/packages/web/dist/server/rex-gateway.d.ts +39 -0
  1188. package/packages/web/dist/server/rex-gateway.js +47 -0
  1189. package/packages/web/dist/server/rex-gateway.js.map +1 -0
  1190. package/packages/web/dist/server/routes-adaptive.d.ts +21 -0
  1191. package/packages/web/dist/server/routes-adaptive.js +659 -0
  1192. package/packages/web/dist/server/routes-adaptive.js.map +1 -0
  1193. package/packages/web/dist/server/routes-config.d.ts +47 -0
  1194. package/packages/web/dist/server/routes-config.js +222 -0
  1195. package/packages/web/dist/server/routes-config.js.map +1 -0
  1196. package/packages/web/dist/server/routes-data.d.ts +14 -0
  1197. package/packages/web/dist/server/routes-data.js +129 -0
  1198. package/packages/web/dist/server/routes-data.js.map +1 -0
  1199. package/packages/web/dist/server/routes-features.d.ts +14 -0
  1200. package/packages/web/dist/server/routes-features.js +245 -0
  1201. package/packages/web/dist/server/routes-features.js.map +1 -0
  1202. package/packages/web/dist/server/routes-hench.d.ts +116 -0
  1203. package/packages/web/dist/server/routes-hench.js +2016 -0
  1204. package/packages/web/dist/server/routes-hench.js.map +1 -0
  1205. package/packages/web/dist/server/routes-integrations.d.ts +23 -0
  1206. package/packages/web/dist/server/routes-integrations.js +277 -0
  1207. package/packages/web/dist/server/routes-integrations.js.map +1 -0
  1208. package/packages/web/dist/server/routes-mcp.d.ts +31 -0
  1209. package/packages/web/dist/server/routes-mcp.js +175 -0
  1210. package/packages/web/dist/server/routes-mcp.js.map +1 -0
  1211. package/packages/web/dist/server/routes-notion.d.ts +23 -0
  1212. package/packages/web/dist/server/routes-notion.js +723 -0
  1213. package/packages/web/dist/server/routes-notion.js.map +1 -0
  1214. package/packages/web/dist/server/routes-project.d.ts +47 -0
  1215. package/packages/web/dist/server/routes-project.js +128 -0
  1216. package/packages/web/dist/server/routes-project.js.map +1 -0
  1217. package/packages/web/dist/server/routes-rex/analysis.d.ts +11 -0
  1218. package/packages/web/dist/server/routes-rex/analysis.js +583 -0
  1219. package/packages/web/dist/server/routes-rex/analysis.js.map +1 -0
  1220. package/packages/web/dist/server/routes-rex/execution.d.ts +37 -0
  1221. package/packages/web/dist/server/routes-rex/execution.js +355 -0
  1222. package/packages/web/dist/server/routes-rex/execution.js.map +1 -0
  1223. package/packages/web/dist/server/routes-rex/health.d.ts +8 -0
  1224. package/packages/web/dist/server/routes-rex/health.js +136 -0
  1225. package/packages/web/dist/server/routes-rex/health.js.map +1 -0
  1226. package/packages/web/dist/server/routes-rex/index.d.ts +35 -0
  1227. package/packages/web/dist/server/routes-rex/index.js +72 -0
  1228. package/packages/web/dist/server/routes-rex/index.js.map +1 -0
  1229. package/packages/web/dist/server/routes-rex/items.d.ts +8 -0
  1230. package/packages/web/dist/server/routes-rex/items.js +359 -0
  1231. package/packages/web/dist/server/routes-rex/items.js.map +1 -0
  1232. package/packages/web/dist/server/routes-rex/prune.d.ts +11 -0
  1233. package/packages/web/dist/server/routes-rex/prune.js +379 -0
  1234. package/packages/web/dist/server/routes-rex/prune.js.map +1 -0
  1235. package/packages/web/dist/server/routes-rex/reads.d.ts +9 -0
  1236. package/packages/web/dist/server/routes-rex/reads.js +119 -0
  1237. package/packages/web/dist/server/routes-rex/reads.js.map +1 -0
  1238. package/packages/web/dist/server/routes-rex/requirements.d.ts +10 -0
  1239. package/packages/web/dist/server/routes-rex/requirements.js +408 -0
  1240. package/packages/web/dist/server/routes-rex/requirements.js.map +1 -0
  1241. package/packages/web/dist/server/routes-rex/shared.d.ts +37 -0
  1242. package/packages/web/dist/server/routes-rex/shared.js +73 -0
  1243. package/packages/web/dist/server/routes-rex/shared.js.map +1 -0
  1244. package/packages/web/dist/server/routes-rex.d.ts +77 -0
  1245. package/packages/web/dist/server/routes-rex.js +2403 -0
  1246. package/packages/web/dist/server/routes-rex.js.map +1 -0
  1247. package/packages/web/dist/server/routes-search.d.ts +26 -0
  1248. package/packages/web/dist/server/routes-search.js +82 -0
  1249. package/packages/web/dist/server/routes-search.js.map +1 -0
  1250. package/packages/web/dist/server/routes-sourcevision.d.ts +18 -0
  1251. package/packages/web/dist/server/routes-sourcevision.js +444 -0
  1252. package/packages/web/dist/server/routes-sourcevision.js.map +1 -0
  1253. package/packages/web/dist/server/routes-static.d.ts +20 -0
  1254. package/packages/web/dist/server/routes-static.js +168 -0
  1255. package/packages/web/dist/server/routes-static.js.map +1 -0
  1256. package/packages/web/dist/server/routes-status.d.ts +58 -0
  1257. package/packages/web/dist/server/routes-status.js +191 -0
  1258. package/packages/web/dist/server/routes-status.js.map +1 -0
  1259. package/packages/web/dist/server/routes-token-usage.d.ts +63 -0
  1260. package/packages/web/dist/server/routes-token-usage.js +720 -0
  1261. package/packages/web/dist/server/routes-token-usage.js.map +1 -0
  1262. package/packages/web/dist/server/routes-validation.d.ts +10 -0
  1263. package/packages/web/dist/server/routes-validation.js +365 -0
  1264. package/packages/web/dist/server/routes-validation.js.map +1 -0
  1265. package/packages/web/dist/server/routes-workflow.d.ts +15 -0
  1266. package/packages/web/dist/server/routes-workflow.js +498 -0
  1267. package/packages/web/dist/server/routes-workflow.js.map +1 -0
  1268. package/packages/web/dist/server/search-index.d.ts +111 -0
  1269. package/packages/web/dist/server/search-index.js +348 -0
  1270. package/packages/web/dist/server/search-index.js.map +1 -0
  1271. package/packages/web/dist/server/shared-types.d.ts +65 -0
  1272. package/packages/web/dist/server/shared-types.js +31 -0
  1273. package/packages/web/dist/server/shared-types.js.map +1 -0
  1274. package/packages/web/dist/server/start.d.ts +68 -0
  1275. package/packages/web/dist/server/start.js +568 -0
  1276. package/packages/web/dist/server/start.js.map +1 -0
  1277. package/packages/web/dist/server/task-usage.d.ts +17 -0
  1278. package/packages/web/dist/server/task-usage.js +20 -0
  1279. package/packages/web/dist/server/task-usage.js.map +1 -0
  1280. package/packages/web/dist/server/types.d.ts +27 -0
  1281. package/packages/web/dist/server/types.js +26 -0
  1282. package/packages/web/dist/server/types.js.map +1 -0
  1283. package/packages/web/dist/server/usage-cleanup-scheduler.d.ts +107 -0
  1284. package/packages/web/dist/server/usage-cleanup-scheduler.js +232 -0
  1285. package/packages/web/dist/server/usage-cleanup-scheduler.js.map +1 -0
  1286. package/packages/web/dist/server/websocket.d.ts +131 -0
  1287. package/packages/web/dist/server/websocket.js +512 -0
  1288. package/packages/web/dist/server/websocket.js.map +1 -0
  1289. package/packages/web/dist/server/ws-health-tracker.d.ts +86 -0
  1290. package/packages/web/dist/server/ws-health-tracker.js +186 -0
  1291. package/packages/web/dist/server/ws-health-tracker.js.map +1 -0
  1292. package/packages/web/dist/shared/data-files.d.ts +17 -0
  1293. package/packages/web/dist/shared/data-files.js +18 -0
  1294. package/packages/web/dist/shared/data-files.js.map +1 -0
  1295. package/packages/web/dist/shared/index.d.ts +9 -0
  1296. package/packages/web/dist/shared/index.js +9 -0
  1297. package/packages/web/dist/shared/index.js.map +1 -0
  1298. package/packages/web/dist/shared/node-culler.d.ts +94 -0
  1299. package/packages/web/dist/shared/node-culler.js +133 -0
  1300. package/packages/web/dist/shared/node-culler.js.map +1 -0
  1301. package/packages/web/dist/shared/request-dedup.d.ts +43 -0
  1302. package/packages/web/dist/shared/request-dedup.js +55 -0
  1303. package/packages/web/dist/shared/request-dedup.js.map +1 -0
  1304. package/packages/web/dist/shared/view-id.d.ts +8 -0
  1305. package/packages/web/dist/shared/view-id.js +9 -0
  1306. package/packages/web/dist/shared/view-id.js.map +1 -0
  1307. package/packages/web/dist/viewer/Hench-F.png +0 -0
  1308. package/packages/web/dist/viewer/Rex-F.png +0 -0
  1309. package/packages/web/dist/viewer/SourceVision-F.png +0 -0
  1310. package/packages/web/dist/viewer/SourceVision.png +0 -0
  1311. package/packages/web/dist/viewer/api.d.ts +19 -0
  1312. package/packages/web/dist/viewer/api.js +17 -0
  1313. package/packages/web/dist/viewer/api.js.map +1 -0
  1314. package/packages/web/dist/viewer/batched-tick-dispatcher.d.ts +83 -0
  1315. package/packages/web/dist/viewer/batched-tick-dispatcher.js +183 -0
  1316. package/packages/web/dist/viewer/batched-tick-dispatcher.js.map +1 -0
  1317. package/packages/web/dist/viewer/bootstrap.d.ts +13 -0
  1318. package/packages/web/dist/viewer/bootstrap.js +40 -0
  1319. package/packages/web/dist/viewer/bootstrap.js.map +1 -0
  1320. package/packages/web/dist/viewer/call-rate-limiter.d.ts +50 -0
  1321. package/packages/web/dist/viewer/call-rate-limiter.js +103 -0
  1322. package/packages/web/dist/viewer/call-rate-limiter.js.map +1 -0
  1323. package/packages/web/dist/viewer/components/active-tasks-panel.d.ts +36 -0
  1324. package/packages/web/dist/viewer/components/active-tasks-panel.js +183 -0
  1325. package/packages/web/dist/viewer/components/active-tasks-panel.js.map +1 -0
  1326. package/packages/web/dist/viewer/components/breadcrumb.d.ts +21 -0
  1327. package/packages/web/dist/viewer/components/breadcrumb.js +117 -0
  1328. package/packages/web/dist/viewer/components/breadcrumb.js.map +1 -0
  1329. package/packages/web/dist/viewer/components/concurrency-panel.d.ts +18 -0
  1330. package/packages/web/dist/viewer/components/concurrency-panel.js +175 -0
  1331. package/packages/web/dist/viewer/components/concurrency-panel.js.map +1 -0
  1332. package/packages/web/dist/viewer/components/config-footer.d.ts +11 -0
  1333. package/packages/web/dist/viewer/components/config-footer.js +132 -0
  1334. package/packages/web/dist/viewer/components/config-footer.js.map +1 -0
  1335. package/packages/web/dist/viewer/components/constants.d.ts +10 -0
  1336. package/packages/web/dist/viewer/components/constants.js +11 -0
  1337. package/packages/web/dist/viewer/components/constants.js.map +1 -0
  1338. package/packages/web/dist/viewer/components/copy-link-button.d.ts +30 -0
  1339. package/packages/web/dist/viewer/components/copy-link-button.js +74 -0
  1340. package/packages/web/dist/viewer/components/copy-link-button.js.map +1 -0
  1341. package/packages/web/dist/viewer/components/crash-recovery-banner.d.ts +28 -0
  1342. package/packages/web/dist/viewer/components/crash-recovery-banner.js +47 -0
  1343. package/packages/web/dist/viewer/components/crash-recovery-banner.js.map +1 -0
  1344. package/packages/web/dist/viewer/components/data-display/collapsible-section.d.ts +14 -0
  1345. package/packages/web/dist/viewer/components/data-display/collapsible-section.js +66 -0
  1346. package/packages/web/dist/viewer/components/data-display/collapsible-section.js.map +1 -0
  1347. package/packages/web/dist/viewer/components/data-display/findings-list.d.ts +13 -0
  1348. package/packages/web/dist/viewer/components/data-display/findings-list.js +136 -0
  1349. package/packages/web/dist/viewer/components/data-display/findings-list.js.map +1 -0
  1350. package/packages/web/dist/viewer/components/data-display/health-gauge.d.ts +37 -0
  1351. package/packages/web/dist/viewer/components/data-display/health-gauge.js +62 -0
  1352. package/packages/web/dist/viewer/components/data-display/health-gauge.js.map +1 -0
  1353. package/packages/web/dist/viewer/components/data-display/mini-charts.d.ts +36 -0
  1354. package/packages/web/dist/viewer/components/data-display/mini-charts.js +124 -0
  1355. package/packages/web/dist/viewer/components/data-display/mini-charts.js.map +1 -0
  1356. package/packages/web/dist/viewer/components/data-display/tree-view.d.ts +18 -0
  1357. package/packages/web/dist/viewer/components/data-display/tree-view.js +107 -0
  1358. package/packages/web/dist/viewer/components/data-display/tree-view.js.map +1 -0
  1359. package/packages/web/dist/viewer/components/data-display/zone-map.d.ts +28 -0
  1360. package/packages/web/dist/viewer/components/data-display/zone-map.js +197 -0
  1361. package/packages/web/dist/viewer/components/data-display/zone-map.js.map +1 -0
  1362. package/packages/web/dist/viewer/components/degradation-banner.d.ts +28 -0
  1363. package/packages/web/dist/viewer/components/degradation-banner.js +47 -0
  1364. package/packages/web/dist/viewer/components/degradation-banner.js.map +1 -0
  1365. package/packages/web/dist/viewer/components/detail-panel.d.ts +12 -0
  1366. package/packages/web/dist/viewer/components/detail-panel.js +166 -0
  1367. package/packages/web/dist/viewer/components/detail-panel.js.map +1 -0
  1368. package/packages/web/dist/viewer/components/elapsed-time.d.ts +38 -0
  1369. package/packages/web/dist/viewer/components/elapsed-time.js +35 -0
  1370. package/packages/web/dist/viewer/components/elapsed-time.js.map +1 -0
  1371. package/packages/web/dist/viewer/components/faq.d.ts +12 -0
  1372. package/packages/web/dist/viewer/components/faq.js +237 -0
  1373. package/packages/web/dist/viewer/components/faq.js.map +1 -0
  1374. package/packages/web/dist/viewer/components/favicon.d.ts +30 -0
  1375. package/packages/web/dist/viewer/components/favicon.js +90 -0
  1376. package/packages/web/dist/viewer/components/favicon.js.map +1 -0
  1377. package/packages/web/dist/viewer/components/guide.d.ts +5 -0
  1378. package/packages/web/dist/viewer/components/guide.js +116 -0
  1379. package/packages/web/dist/viewer/components/guide.js.map +1 -0
  1380. package/packages/web/dist/viewer/components/index.d.ts +37 -0
  1381. package/packages/web/dist/viewer/components/index.js +46 -0
  1382. package/packages/web/dist/viewer/components/index.js.map +1 -0
  1383. package/packages/web/dist/viewer/components/logos.d.ts +42 -0
  1384. package/packages/web/dist/viewer/components/logos.js +46 -0
  1385. package/packages/web/dist/viewer/components/logos.js.map +1 -0
  1386. package/packages/web/dist/viewer/components/memory-panel.d.ts +19 -0
  1387. package/packages/web/dist/viewer/components/memory-panel.js +181 -0
  1388. package/packages/web/dist/viewer/components/memory-panel.js.map +1 -0
  1389. package/packages/web/dist/viewer/components/memory-warning.d.ts +23 -0
  1390. package/packages/web/dist/viewer/components/memory-warning.js +42 -0
  1391. package/packages/web/dist/viewer/components/memory-warning.js.map +1 -0
  1392. package/packages/web/dist/viewer/components/notion-schema-wizard.d.ts +16 -0
  1393. package/packages/web/dist/viewer/components/notion-schema-wizard.js +263 -0
  1394. package/packages/web/dist/viewer/components/notion-schema-wizard.js.map +1 -0
  1395. package/packages/web/dist/viewer/components/polling-suspension-indicator.d.ts +24 -0
  1396. package/packages/web/dist/viewer/components/polling-suspension-indicator.js +31 -0
  1397. package/packages/web/dist/viewer/components/polling-suspension-indicator.js.map +1 -0
  1398. package/packages/web/dist/viewer/components/prd-tree/add-item-form.d.ts +31 -0
  1399. package/packages/web/dist/viewer/components/prd-tree/add-item-form.js +231 -0
  1400. package/packages/web/dist/viewer/components/prd-tree/add-item-form.js.map +1 -0
  1401. package/packages/web/dist/viewer/components/prd-tree/analyze-panel.d.ts +13 -0
  1402. package/packages/web/dist/viewer/components/prd-tree/analyze-panel.js +245 -0
  1403. package/packages/web/dist/viewer/components/prd-tree/analyze-panel.js.map +1 -0
  1404. package/packages/web/dist/viewer/components/prd-tree/batch-import-panel.d.ts +34 -0
  1405. package/packages/web/dist/viewer/components/prd-tree/batch-import-panel.js +415 -0
  1406. package/packages/web/dist/viewer/components/prd-tree/batch-import-panel.js.map +1 -0
  1407. package/packages/web/dist/viewer/components/prd-tree/bulk-actions.d.ts +19 -0
  1408. package/packages/web/dist/viewer/components/prd-tree/bulk-actions.js +90 -0
  1409. package/packages/web/dist/viewer/components/prd-tree/bulk-actions.js.map +1 -0
  1410. package/packages/web/dist/viewer/components/prd-tree/compute.d.ts +32 -0
  1411. package/packages/web/dist/viewer/components/prd-tree/compute.js +129 -0
  1412. package/packages/web/dist/viewer/components/prd-tree/compute.js.map +1 -0
  1413. package/packages/web/dist/viewer/components/prd-tree/delete-confirmation.d.ts +23 -0
  1414. package/packages/web/dist/viewer/components/prd-tree/delete-confirmation.js +83 -0
  1415. package/packages/web/dist/viewer/components/prd-tree/delete-confirmation.js.map +1 -0
  1416. package/packages/web/dist/viewer/components/prd-tree/execution-panel.d.ts +14 -0
  1417. package/packages/web/dist/viewer/components/prd-tree/execution-panel.js +291 -0
  1418. package/packages/web/dist/viewer/components/prd-tree/execution-panel.js.map +1 -0
  1419. package/packages/web/dist/viewer/components/prd-tree/facet-filter.d.ts +40 -0
  1420. package/packages/web/dist/viewer/components/prd-tree/facet-filter.js +188 -0
  1421. package/packages/web/dist/viewer/components/prd-tree/facet-filter.js.map +1 -0
  1422. package/packages/web/dist/viewer/components/prd-tree/index.d.ts +24 -0
  1423. package/packages/web/dist/viewer/components/prd-tree/index.js +16 -0
  1424. package/packages/web/dist/viewer/components/prd-tree/index.js.map +1 -0
  1425. package/packages/web/dist/viewer/components/prd-tree/inline-add-form.d.ts +32 -0
  1426. package/packages/web/dist/viewer/components/prd-tree/inline-add-form.js +175 -0
  1427. package/packages/web/dist/viewer/components/prd-tree/inline-add-form.js.map +1 -0
  1428. package/packages/web/dist/viewer/components/prd-tree/inline-status-picker.d.ts +31 -0
  1429. package/packages/web/dist/viewer/components/prd-tree/inline-status-picker.js +110 -0
  1430. package/packages/web/dist/viewer/components/prd-tree/inline-status-picker.js.map +1 -0
  1431. package/packages/web/dist/viewer/components/prd-tree/lazy-children.d.ts +40 -0
  1432. package/packages/web/dist/viewer/components/prd-tree/lazy-children.js +73 -0
  1433. package/packages/web/dist/viewer/components/prd-tree/lazy-children.js.map +1 -0
  1434. package/packages/web/dist/viewer/components/prd-tree/levels.d.ts +31 -0
  1435. package/packages/web/dist/viewer/components/prd-tree/levels.js +72 -0
  1436. package/packages/web/dist/viewer/components/prd-tree/levels.js.map +1 -0
  1437. package/packages/web/dist/viewer/components/prd-tree/listener-lifecycle.d.ts +105 -0
  1438. package/packages/web/dist/viewer/components/prd-tree/listener-lifecycle.js +173 -0
  1439. package/packages/web/dist/viewer/components/prd-tree/listener-lifecycle.js.map +1 -0
  1440. package/packages/web/dist/viewer/components/prd-tree/merge-preview.d.ts +25 -0
  1441. package/packages/web/dist/viewer/components/prd-tree/merge-preview.js +181 -0
  1442. package/packages/web/dist/viewer/components/prd-tree/merge-preview.js.map +1 -0
  1443. package/packages/web/dist/viewer/components/prd-tree/node-culler.d.ts +96 -0
  1444. package/packages/web/dist/viewer/components/prd-tree/node-culler.js +135 -0
  1445. package/packages/web/dist/viewer/components/prd-tree/node-culler.js.map +1 -0
  1446. package/packages/web/dist/viewer/components/prd-tree/prd-tree.d.ts +91 -0
  1447. package/packages/web/dist/viewer/components/prd-tree/prd-tree.js +565 -0
  1448. package/packages/web/dist/viewer/components/prd-tree/prd-tree.js.map +1 -0
  1449. package/packages/web/dist/viewer/components/prd-tree/progressive-loader.d.ts +114 -0
  1450. package/packages/web/dist/viewer/components/prd-tree/progressive-loader.js +225 -0
  1451. package/packages/web/dist/viewer/components/prd-tree/progressive-loader.js.map +1 -0
  1452. package/packages/web/dist/viewer/components/prd-tree/proposal-editor.d.ts +44 -0
  1453. package/packages/web/dist/viewer/components/prd-tree/proposal-editor.js +438 -0
  1454. package/packages/web/dist/viewer/components/prd-tree/proposal-editor.js.map +1 -0
  1455. package/packages/web/dist/viewer/components/prd-tree/prune-confirmation.d.ts +25 -0
  1456. package/packages/web/dist/viewer/components/prd-tree/prune-confirmation.js +336 -0
  1457. package/packages/web/dist/viewer/components/prd-tree/prune-confirmation.js.map +1 -0
  1458. package/packages/web/dist/viewer/components/prd-tree/prune-diff-tree.d.ts +39 -0
  1459. package/packages/web/dist/viewer/components/prd-tree/prune-diff-tree.js +319 -0
  1460. package/packages/web/dist/viewer/components/prd-tree/prune-diff-tree.js.map +1 -0
  1461. package/packages/web/dist/viewer/components/prd-tree/reorganize-panel.d.ts +16 -0
  1462. package/packages/web/dist/viewer/components/prd-tree/reorganize-panel.js +213 -0
  1463. package/packages/web/dist/viewer/components/prd-tree/reorganize-panel.js.map +1 -0
  1464. package/packages/web/dist/viewer/components/prd-tree/shared-imports.d.ts +18 -0
  1465. package/packages/web/dist/viewer/components/prd-tree/shared-imports.js +18 -0
  1466. package/packages/web/dist/viewer/components/prd-tree/shared-imports.js.map +1 -0
  1467. package/packages/web/dist/viewer/components/prd-tree/smart-add-input.d.ts +19 -0
  1468. package/packages/web/dist/viewer/components/prd-tree/smart-add-input.js +383 -0
  1469. package/packages/web/dist/viewer/components/prd-tree/smart-add-input.js.map +1 -0
  1470. package/packages/web/dist/viewer/components/prd-tree/status-filter.d.ts +40 -0
  1471. package/packages/web/dist/viewer/components/prd-tree/status-filter.js +131 -0
  1472. package/packages/web/dist/viewer/components/prd-tree/status-filter.js.map +1 -0
  1473. package/packages/web/dist/viewer/components/prd-tree/task-detail.d.ts +41 -0
  1474. package/packages/web/dist/viewer/components/prd-tree/task-detail.js +1205 -0
  1475. package/packages/web/dist/viewer/components/prd-tree/task-detail.js.map +1 -0
  1476. package/packages/web/dist/viewer/components/prd-tree/task-utilization.d.ts +7 -0
  1477. package/packages/web/dist/viewer/components/prd-tree/task-utilization.js +25 -0
  1478. package/packages/web/dist/viewer/components/prd-tree/task-utilization.js.map +1 -0
  1479. package/packages/web/dist/viewer/components/prd-tree/tree-differ.d.ts +59 -0
  1480. package/packages/web/dist/viewer/components/prd-tree/tree-differ.js +200 -0
  1481. package/packages/web/dist/viewer/components/prd-tree/tree-differ.js.map +1 -0
  1482. package/packages/web/dist/viewer/components/prd-tree/tree-event-delegate.d.ts +70 -0
  1483. package/packages/web/dist/viewer/components/prd-tree/tree-event-delegate.js +176 -0
  1484. package/packages/web/dist/viewer/components/prd-tree/tree-event-delegate.js.map +1 -0
  1485. package/packages/web/dist/viewer/components/prd-tree/tree-search.d.ts +65 -0
  1486. package/packages/web/dist/viewer/components/prd-tree/tree-search.js +178 -0
  1487. package/packages/web/dist/viewer/components/prd-tree/tree-search.js.map +1 -0
  1488. package/packages/web/dist/viewer/components/prd-tree/tree-utils.d.ts +38 -0
  1489. package/packages/web/dist/viewer/components/prd-tree/tree-utils.js +107 -0
  1490. package/packages/web/dist/viewer/components/prd-tree/tree-utils.js.map +1 -0
  1491. package/packages/web/dist/viewer/components/prd-tree/types.d.ts +93 -0
  1492. package/packages/web/dist/viewer/components/prd-tree/types.js +16 -0
  1493. package/packages/web/dist/viewer/components/prd-tree/types.js.map +1 -0
  1494. package/packages/web/dist/viewer/components/prd-tree/virtual-scroll.d.ts +119 -0
  1495. package/packages/web/dist/viewer/components/prd-tree/virtual-scroll.js +169 -0
  1496. package/packages/web/dist/viewer/components/prd-tree/virtual-scroll.js.map +1 -0
  1497. package/packages/web/dist/viewer/components/progressive-loader.d.ts +114 -0
  1498. package/packages/web/dist/viewer/components/progressive-loader.js +225 -0
  1499. package/packages/web/dist/viewer/components/progressive-loader.js.map +1 -0
  1500. package/packages/web/dist/viewer/components/refresh-queue-status.d.ts +20 -0
  1501. package/packages/web/dist/viewer/components/refresh-queue-status.js +65 -0
  1502. package/packages/web/dist/viewer/components/refresh-queue-status.js.map +1 -0
  1503. package/packages/web/dist/viewer/components/rex-task-link.d.ts +50 -0
  1504. package/packages/web/dist/viewer/components/rex-task-link.js +218 -0
  1505. package/packages/web/dist/viewer/components/rex-task-link.js.map +1 -0
  1506. package/packages/web/dist/viewer/components/search-filter.d.ts +20 -0
  1507. package/packages/web/dist/viewer/components/search-filter.js +28 -0
  1508. package/packages/web/dist/viewer/components/search-filter.js.map +1 -0
  1509. package/packages/web/dist/viewer/components/search-overlay.d.ts +31 -0
  1510. package/packages/web/dist/viewer/components/search-overlay.js +472 -0
  1511. package/packages/web/dist/viewer/components/search-overlay.js.map +1 -0
  1512. package/packages/web/dist/viewer/components/sidebar.d.ts +18 -0
  1513. package/packages/web/dist/viewer/components/sidebar.js +357 -0
  1514. package/packages/web/dist/viewer/components/sidebar.js.map +1 -0
  1515. package/packages/web/dist/viewer/components/status-indicators.d.ts +63 -0
  1516. package/packages/web/dist/viewer/components/status-indicators.js +136 -0
  1517. package/packages/web/dist/viewer/components/status-indicators.js.map +1 -0
  1518. package/packages/web/dist/viewer/components/theme-toggle.d.ts +8 -0
  1519. package/packages/web/dist/viewer/components/theme-toggle.js +28 -0
  1520. package/packages/web/dist/viewer/components/theme-toggle.js.map +1 -0
  1521. package/packages/web/dist/viewer/components/throttle-controls.d.ts +18 -0
  1522. package/packages/web/dist/viewer/components/throttle-controls.js +304 -0
  1523. package/packages/web/dist/viewer/components/throttle-controls.js.map +1 -0
  1524. package/packages/web/dist/viewer/components/ws-health-panel.d.ts +18 -0
  1525. package/packages/web/dist/viewer/components/ws-health-panel.js +250 -0
  1526. package/packages/web/dist/viewer/components/ws-health-panel.js.map +1 -0
  1527. package/packages/web/dist/viewer/components/zone-slideout.d.ts +17 -0
  1528. package/packages/web/dist/viewer/components/zone-slideout.js +162 -0
  1529. package/packages/web/dist/viewer/components/zone-slideout.js.map +1 -0
  1530. package/packages/web/dist/viewer/crash/crash-detector.d.ts +69 -0
  1531. package/packages/web/dist/viewer/crash/crash-detector.js +239 -0
  1532. package/packages/web/dist/viewer/crash/crash-detector.js.map +1 -0
  1533. package/packages/web/dist/viewer/crash/index.d.ts +7 -0
  1534. package/packages/web/dist/viewer/crash/index.js +8 -0
  1535. package/packages/web/dist/viewer/crash/index.js.map +1 -0
  1536. package/packages/web/dist/viewer/crash-detector.d.ts +105 -0
  1537. package/packages/web/dist/viewer/crash-detector.js +257 -0
  1538. package/packages/web/dist/viewer/crash-detector.js.map +1 -0
  1539. package/packages/web/dist/viewer/deployed-mode.d.ts +37 -0
  1540. package/packages/web/dist/viewer/deployed-mode.js +94 -0
  1541. package/packages/web/dist/viewer/deployed-mode.js.map +1 -0
  1542. package/packages/web/dist/viewer/dom-performance-monitor.d.ts +158 -0
  1543. package/packages/web/dist/viewer/dom-performance-monitor.js +342 -0
  1544. package/packages/web/dist/viewer/dom-performance-monitor.js.map +1 -0
  1545. package/packages/web/dist/viewer/dom-update-gate.d.ts +122 -0
  1546. package/packages/web/dist/viewer/dom-update-gate.js +229 -0
  1547. package/packages/web/dist/viewer/dom-update-gate.js.map +1 -0
  1548. package/packages/web/dist/viewer/external.d.ts +17 -0
  1549. package/packages/web/dist/viewer/external.js +17 -0
  1550. package/packages/web/dist/viewer/external.js.map +1 -0
  1551. package/packages/web/dist/viewer/graceful-degradation.d.ts +73 -0
  1552. package/packages/web/dist/viewer/graceful-degradation.js +152 -0
  1553. package/packages/web/dist/viewer/graceful-degradation.js.map +1 -0
  1554. package/packages/web/dist/viewer/graph/index.d.ts +9 -0
  1555. package/packages/web/dist/viewer/graph/index.js +12 -0
  1556. package/packages/web/dist/viewer/graph/index.js.map +1 -0
  1557. package/packages/web/dist/viewer/graph/physics.d.ts +96 -0
  1558. package/packages/web/dist/viewer/graph/physics.js +366 -0
  1559. package/packages/web/dist/viewer/graph/physics.js.map +1 -0
  1560. package/packages/web/dist/viewer/graph/renderer.d.ts +184 -0
  1561. package/packages/web/dist/viewer/graph/renderer.js +1438 -0
  1562. package/packages/web/dist/viewer/graph/renderer.js.map +1 -0
  1563. package/packages/web/dist/viewer/hooks/index.d.ts +27 -0
  1564. package/packages/web/dist/viewer/hooks/index.js +28 -0
  1565. package/packages/web/dist/viewer/hooks/index.js.map +1 -0
  1566. package/packages/web/dist/viewer/hooks/use-app-data.d.ts +31 -0
  1567. package/packages/web/dist/viewer/hooks/use-app-data.js +152 -0
  1568. package/packages/web/dist/viewer/hooks/use-app-data.js.map +1 -0
  1569. package/packages/web/dist/viewer/hooks/use-crash-recovery.d.ts +50 -0
  1570. package/packages/web/dist/viewer/hooks/use-crash-recovery.js +76 -0
  1571. package/packages/web/dist/viewer/hooks/use-crash-recovery.js.map +1 -0
  1572. package/packages/web/dist/viewer/hooks/use-delete-actions.d.ts +48 -0
  1573. package/packages/web/dist/viewer/hooks/use-delete-actions.js +103 -0
  1574. package/packages/web/dist/viewer/hooks/use-delete-actions.js.map +1 -0
  1575. package/packages/web/dist/viewer/hooks/use-dom-performance-monitor.d.ts +68 -0
  1576. package/packages/web/dist/viewer/hooks/use-dom-performance-monitor.js +71 -0
  1577. package/packages/web/dist/viewer/hooks/use-dom-performance-monitor.js.map +1 -0
  1578. package/packages/web/dist/viewer/hooks/use-facet-state.d.ts +32 -0
  1579. package/packages/web/dist/viewer/hooks/use-facet-state.js +119 -0
  1580. package/packages/web/dist/viewer/hooks/use-facet-state.js.map +1 -0
  1581. package/packages/web/dist/viewer/hooks/use-feature-toggle.d.ts +18 -0
  1582. package/packages/web/dist/viewer/hooks/use-feature-toggle.js +57 -0
  1583. package/packages/web/dist/viewer/hooks/use-feature-toggle.js.map +1 -0
  1584. package/packages/web/dist/viewer/hooks/use-file-edges.d.ts +23 -0
  1585. package/packages/web/dist/viewer/hooks/use-file-edges.js +221 -0
  1586. package/packages/web/dist/viewer/hooks/use-file-edges.js.map +1 -0
  1587. package/packages/web/dist/viewer/hooks/use-graceful-degradation.d.ts +30 -0
  1588. package/packages/web/dist/viewer/hooks/use-graceful-degradation.js +45 -0
  1589. package/packages/web/dist/viewer/hooks/use-graceful-degradation.js.map +1 -0
  1590. package/packages/web/dist/viewer/hooks/use-item-selection.d.ts +49 -0
  1591. package/packages/web/dist/viewer/hooks/use-item-selection.js +117 -0
  1592. package/packages/web/dist/viewer/hooks/use-item-selection.js.map +1 -0
  1593. package/packages/web/dist/viewer/hooks/use-memory-monitor.d.ts +39 -0
  1594. package/packages/web/dist/viewer/hooks/use-memory-monitor.js +73 -0
  1595. package/packages/web/dist/viewer/hooks/use-memory-monitor.js.map +1 -0
  1596. package/packages/web/dist/viewer/hooks/use-pan-zoom.d.ts +33 -0
  1597. package/packages/web/dist/viewer/hooks/use-pan-zoom.js +110 -0
  1598. package/packages/web/dist/viewer/hooks/use-pan-zoom.js.map +1 -0
  1599. package/packages/web/dist/viewer/hooks/use-persistent-filter.d.ts +24 -0
  1600. package/packages/web/dist/viewer/hooks/use-persistent-filter.js +37 -0
  1601. package/packages/web/dist/viewer/hooks/use-persistent-filter.js.map +1 -0
  1602. package/packages/web/dist/viewer/hooks/use-polling-suspension.d.ts +32 -0
  1603. package/packages/web/dist/viewer/hooks/use-polling-suspension.js +41 -0
  1604. package/packages/web/dist/viewer/hooks/use-polling-suspension.js.map +1 -0
  1605. package/packages/web/dist/viewer/hooks/use-polling.d.ts +39 -0
  1606. package/packages/web/dist/viewer/hooks/use-polling.js +55 -0
  1607. package/packages/web/dist/viewer/hooks/use-polling.js.map +1 -0
  1608. package/packages/web/dist/viewer/hooks/use-prd-actions.d.ts +126 -0
  1609. package/packages/web/dist/viewer/hooks/use-prd-actions.js +250 -0
  1610. package/packages/web/dist/viewer/hooks/use-prd-actions.js.map +1 -0
  1611. package/packages/web/dist/viewer/hooks/use-prd-data.d.ts +45 -0
  1612. package/packages/web/dist/viewer/hooks/use-prd-data.js +159 -0
  1613. package/packages/web/dist/viewer/hooks/use-prd-data.js.map +1 -0
  1614. package/packages/web/dist/viewer/hooks/use-prd-deep-link.d.ts +45 -0
  1615. package/packages/web/dist/viewer/hooks/use-prd-deep-link.js +60 -0
  1616. package/packages/web/dist/viewer/hooks/use-prd-deep-link.js.map +1 -0
  1617. package/packages/web/dist/viewer/hooks/use-prd-websocket.d.ts +47 -0
  1618. package/packages/web/dist/viewer/hooks/use-prd-websocket.js +139 -0
  1619. package/packages/web/dist/viewer/hooks/use-prd-websocket.js.map +1 -0
  1620. package/packages/web/dist/viewer/hooks/use-project-metadata.d.ts +25 -0
  1621. package/packages/web/dist/viewer/hooks/use-project-metadata.js +55 -0
  1622. package/packages/web/dist/viewer/hooks/use-project-metadata.js.map +1 -0
  1623. package/packages/web/dist/viewer/hooks/use-project-status.d.ts +60 -0
  1624. package/packages/web/dist/viewer/hooks/use-project-status.js +133 -0
  1625. package/packages/web/dist/viewer/hooks/use-project-status.js.map +1 -0
  1626. package/packages/web/dist/viewer/hooks/use-refresh-throttle.d.ts +45 -0
  1627. package/packages/web/dist/viewer/hooks/use-refresh-throttle.js +52 -0
  1628. package/packages/web/dist/viewer/hooks/use-refresh-throttle.js.map +1 -0
  1629. package/packages/web/dist/viewer/hooks/use-route-state.d.ts +18 -0
  1630. package/packages/web/dist/viewer/hooks/use-route-state.js +115 -0
  1631. package/packages/web/dist/viewer/hooks/use-route-state.js.map +1 -0
  1632. package/packages/web/dist/viewer/hooks/use-subzone-edges.d.ts +21 -0
  1633. package/packages/web/dist/viewer/hooks/use-subzone-edges.js +147 -0
  1634. package/packages/web/dist/viewer/hooks/use-subzone-edges.js.map +1 -0
  1635. package/packages/web/dist/viewer/hooks/use-tab-visibility.d.ts +31 -0
  1636. package/packages/web/dist/viewer/hooks/use-tab-visibility.js +43 -0
  1637. package/packages/web/dist/viewer/hooks/use-tab-visibility.js.map +1 -0
  1638. package/packages/web/dist/viewer/hooks/use-tick.d.ts +43 -0
  1639. package/packages/web/dist/viewer/hooks/use-tick.js +76 -0
  1640. package/packages/web/dist/viewer/hooks/use-tick.js.map +1 -0
  1641. package/packages/web/dist/viewer/hooks/use-toast.d.ts +24 -0
  1642. package/packages/web/dist/viewer/hooks/use-toast.js +26 -0
  1643. package/packages/web/dist/viewer/hooks/use-toast.js.map +1 -0
  1644. package/packages/web/dist/viewer/hooks/use-zone-drag.d.ts +30 -0
  1645. package/packages/web/dist/viewer/hooks/use-zone-drag.js +60 -0
  1646. package/packages/web/dist/viewer/hooks/use-zone-drag.js.map +1 -0
  1647. package/packages/web/dist/viewer/index.html +36 -0
  1648. package/packages/web/dist/viewer/loader.d.ts +33 -0
  1649. package/packages/web/dist/viewer/loader.js +195 -0
  1650. package/packages/web/dist/viewer/loader.js.map +1 -0
  1651. package/packages/web/dist/viewer/main.d.ts +1 -0
  1652. package/packages/web/dist/viewer/main.js +121 -0
  1653. package/packages/web/dist/viewer/main.js.map +1 -0
  1654. package/packages/web/dist/viewer/memory-monitor.d.ts +78 -0
  1655. package/packages/web/dist/viewer/memory-monitor.js +218 -0
  1656. package/packages/web/dist/viewer/memory-monitor.js.map +1 -0
  1657. package/packages/web/dist/viewer/message-coalescer.d.ts +96 -0
  1658. package/packages/web/dist/viewer/message-coalescer.js +121 -0
  1659. package/packages/web/dist/viewer/message-coalescer.js.map +1 -0
  1660. package/packages/web/dist/viewer/message-throttle.d.ts +95 -0
  1661. package/packages/web/dist/viewer/message-throttle.js +147 -0
  1662. package/packages/web/dist/viewer/message-throttle.js.map +1 -0
  1663. package/packages/web/dist/viewer/messaging/call-rate-limiter.d.ts +50 -0
  1664. package/packages/web/dist/viewer/messaging/call-rate-limiter.js +103 -0
  1665. package/packages/web/dist/viewer/messaging/call-rate-limiter.js.map +1 -0
  1666. package/packages/web/dist/viewer/messaging/fetch-pipeline.d.ts +58 -0
  1667. package/packages/web/dist/viewer/messaging/fetch-pipeline.js +58 -0
  1668. package/packages/web/dist/viewer/messaging/fetch-pipeline.js.map +1 -0
  1669. package/packages/web/dist/viewer/messaging/index.d.ts +43 -0
  1670. package/packages/web/dist/viewer/messaging/index.js +46 -0
  1671. package/packages/web/dist/viewer/messaging/index.js.map +1 -0
  1672. package/packages/web/dist/viewer/messaging/message-coalescer.d.ts +96 -0
  1673. package/packages/web/dist/viewer/messaging/message-coalescer.js +121 -0
  1674. package/packages/web/dist/viewer/messaging/message-coalescer.js.map +1 -0
  1675. package/packages/web/dist/viewer/messaging/message-throttle.d.ts +95 -0
  1676. package/packages/web/dist/viewer/messaging/message-throttle.js +147 -0
  1677. package/packages/web/dist/viewer/messaging/message-throttle.js.map +1 -0
  1678. package/packages/web/dist/viewer/messaging/request-dedup.d.ts +43 -0
  1679. package/packages/web/dist/viewer/messaging/request-dedup.js +55 -0
  1680. package/packages/web/dist/viewer/messaging/request-dedup.js.map +1 -0
  1681. package/packages/web/dist/viewer/messaging/ws-pipeline.d.ts +85 -0
  1682. package/packages/web/dist/viewer/messaging/ws-pipeline.js +68 -0
  1683. package/packages/web/dist/viewer/messaging/ws-pipeline.js.map +1 -0
  1684. package/packages/web/dist/viewer/n-dx.png +0 -0
  1685. package/packages/web/dist/viewer/performance/crash-detector-test-support.d.ts +15 -0
  1686. package/packages/web/dist/viewer/performance/crash-detector-test-support.js +19 -0
  1687. package/packages/web/dist/viewer/performance/crash-detector-test-support.js.map +1 -0
  1688. package/packages/web/dist/viewer/performance/crash-detector.d.ts +105 -0
  1689. package/packages/web/dist/viewer/performance/crash-detector.js +257 -0
  1690. package/packages/web/dist/viewer/performance/crash-detector.js.map +1 -0
  1691. package/packages/web/dist/viewer/performance/dom-performance-monitor.d.ts +157 -0
  1692. package/packages/web/dist/viewer/performance/dom-performance-monitor.js +341 -0
  1693. package/packages/web/dist/viewer/performance/dom-performance-monitor.js.map +1 -0
  1694. package/packages/web/dist/viewer/performance/dom-update-gate.d.ts +122 -0
  1695. package/packages/web/dist/viewer/performance/dom-update-gate.js +229 -0
  1696. package/packages/web/dist/viewer/performance/dom-update-gate.js.map +1 -0
  1697. package/packages/web/dist/viewer/performance/graceful-degradation.d.ts +73 -0
  1698. package/packages/web/dist/viewer/performance/graceful-degradation.js +152 -0
  1699. package/packages/web/dist/viewer/performance/graceful-degradation.js.map +1 -0
  1700. package/packages/web/dist/viewer/performance/index.d.ts +14 -0
  1701. package/packages/web/dist/viewer/performance/index.js +20 -0
  1702. package/packages/web/dist/viewer/performance/index.js.map +1 -0
  1703. package/packages/web/dist/viewer/performance/memory-monitor.d.ts +78 -0
  1704. package/packages/web/dist/viewer/performance/memory-monitor.js +218 -0
  1705. package/packages/web/dist/viewer/performance/memory-monitor.js.map +1 -0
  1706. package/packages/web/dist/viewer/performance/refresh-throttle.d.ts +90 -0
  1707. package/packages/web/dist/viewer/performance/refresh-throttle.js +266 -0
  1708. package/packages/web/dist/viewer/performance/refresh-throttle.js.map +1 -0
  1709. package/packages/web/dist/viewer/performance/response-buffer-gate.d.ts +108 -0
  1710. package/packages/web/dist/viewer/performance/response-buffer-gate.js +170 -0
  1711. package/packages/web/dist/viewer/performance/response-buffer-gate.js.map +1 -0
  1712. package/packages/web/dist/viewer/performance/update-batcher.d.ts +79 -0
  1713. package/packages/web/dist/viewer/performance/update-batcher.js +119 -0
  1714. package/packages/web/dist/viewer/performance/update-batcher.js.map +1 -0
  1715. package/packages/web/dist/viewer/polling/batched-tick-dispatcher.d.ts +83 -0
  1716. package/packages/web/dist/viewer/polling/batched-tick-dispatcher.js +183 -0
  1717. package/packages/web/dist/viewer/polling/batched-tick-dispatcher.js.map +1 -0
  1718. package/packages/web/dist/viewer/polling/index.d.ts +13 -0
  1719. package/packages/web/dist/viewer/polling/index.js +16 -0
  1720. package/packages/web/dist/viewer/polling/index.js.map +1 -0
  1721. package/packages/web/dist/viewer/polling/polling-manager.d.ts +82 -0
  1722. package/packages/web/dist/viewer/polling/polling-manager.js +254 -0
  1723. package/packages/web/dist/viewer/polling/polling-manager.js.map +1 -0
  1724. package/packages/web/dist/viewer/polling/polling-restart.d.ts +45 -0
  1725. package/packages/web/dist/viewer/polling/polling-restart.js +98 -0
  1726. package/packages/web/dist/viewer/polling/polling-restart.js.map +1 -0
  1727. package/packages/web/dist/viewer/polling/polling-state.d.ts +182 -0
  1728. package/packages/web/dist/viewer/polling/polling-state.js +306 -0
  1729. package/packages/web/dist/viewer/polling/polling-state.js.map +1 -0
  1730. package/packages/web/dist/viewer/polling/tab-visibility.d.ts +112 -0
  1731. package/packages/web/dist/viewer/polling/tab-visibility.js +276 -0
  1732. package/packages/web/dist/viewer/polling/tab-visibility.js.map +1 -0
  1733. package/packages/web/dist/viewer/polling/tick-timer.d.ts +70 -0
  1734. package/packages/web/dist/viewer/polling/tick-timer.js +168 -0
  1735. package/packages/web/dist/viewer/polling/tick-timer.js.map +1 -0
  1736. package/packages/web/dist/viewer/polling/tick-visibility-gate.d.ts +92 -0
  1737. package/packages/web/dist/viewer/polling/tick-visibility-gate.js +146 -0
  1738. package/packages/web/dist/viewer/polling/tick-visibility-gate.js.map +1 -0
  1739. package/packages/web/dist/viewer/polling-manager.d.ts +82 -0
  1740. package/packages/web/dist/viewer/polling-manager.js +254 -0
  1741. package/packages/web/dist/viewer/polling-manager.js.map +1 -0
  1742. package/packages/web/dist/viewer/polling-restart.d.ts +57 -0
  1743. package/packages/web/dist/viewer/polling-restart.js +118 -0
  1744. package/packages/web/dist/viewer/polling-restart.js.map +1 -0
  1745. package/packages/web/dist/viewer/polling-state.d.ts +182 -0
  1746. package/packages/web/dist/viewer/polling-state.js +306 -0
  1747. package/packages/web/dist/viewer/polling-state.js.map +1 -0
  1748. package/packages/web/dist/viewer/refresh-throttle.d.ts +90 -0
  1749. package/packages/web/dist/viewer/refresh-throttle.js +266 -0
  1750. package/packages/web/dist/viewer/refresh-throttle.js.map +1 -0
  1751. package/packages/web/dist/viewer/request-dedup.d.ts +43 -0
  1752. package/packages/web/dist/viewer/request-dedup.js +55 -0
  1753. package/packages/web/dist/viewer/request-dedup.js.map +1 -0
  1754. package/packages/web/dist/viewer/response-buffer-gate.d.ts +108 -0
  1755. package/packages/web/dist/viewer/response-buffer-gate.js +170 -0
  1756. package/packages/web/dist/viewer/response-buffer-gate.js.map +1 -0
  1757. package/packages/web/dist/viewer/route-state.d.ts +8 -0
  1758. package/packages/web/dist/viewer/route-state.js +77 -0
  1759. package/packages/web/dist/viewer/route-state.js.map +1 -0
  1760. package/packages/web/dist/viewer/schema-compat.d.ts +17 -0
  1761. package/packages/web/dist/viewer/schema-compat.js +49 -0
  1762. package/packages/web/dist/viewer/schema-compat.js.map +1 -0
  1763. package/packages/web/dist/viewer/sourcevision-tabs.d.ts +10 -0
  1764. package/packages/web/dist/viewer/sourcevision-tabs.js +14 -0
  1765. package/packages/web/dist/viewer/sourcevision-tabs.js.map +1 -0
  1766. package/packages/web/dist/viewer/tab-visibility.d.ts +112 -0
  1767. package/packages/web/dist/viewer/tab-visibility.js +276 -0
  1768. package/packages/web/dist/viewer/tab-visibility.js.map +1 -0
  1769. package/packages/web/dist/viewer/tick-timer.d.ts +70 -0
  1770. package/packages/web/dist/viewer/tick-timer.js +168 -0
  1771. package/packages/web/dist/viewer/tick-timer.js.map +1 -0
  1772. package/packages/web/dist/viewer/tick-visibility-gate.d.ts +92 -0
  1773. package/packages/web/dist/viewer/tick-visibility-gate.js +146 -0
  1774. package/packages/web/dist/viewer/tick-visibility-gate.js.map +1 -0
  1775. package/packages/web/dist/viewer/types.d.ts +66 -0
  1776. package/packages/web/dist/viewer/types.js +2 -0
  1777. package/packages/web/dist/viewer/types.js.map +1 -0
  1778. package/packages/web/dist/viewer/update-batcher.d.ts +79 -0
  1779. package/packages/web/dist/viewer/update-batcher.js +119 -0
  1780. package/packages/web/dist/viewer/update-batcher.js.map +1 -0
  1781. package/packages/web/dist/viewer/usage/constants.d.ts +14 -0
  1782. package/packages/web/dist/viewer/usage/constants.js +14 -0
  1783. package/packages/web/dist/viewer/usage/constants.js.map +1 -0
  1784. package/packages/web/dist/viewer/usage/index.d.ts +7 -0
  1785. package/packages/web/dist/viewer/usage/index.js +8 -0
  1786. package/packages/web/dist/viewer/usage/index.js.map +1 -0
  1787. package/packages/web/dist/viewer/utils.d.ts +25 -0
  1788. package/packages/web/dist/viewer/utils.js +48 -0
  1789. package/packages/web/dist/viewer/utils.js.map +1 -0
  1790. package/packages/web/dist/viewer/validate.d.ts +23 -0
  1791. package/packages/web/dist/viewer/validate.js +275 -0
  1792. package/packages/web/dist/viewer/validate.js.map +1 -0
  1793. package/packages/web/dist/viewer/views/analysis.d.ts +10 -0
  1794. package/packages/web/dist/viewer/views/analysis.js +109 -0
  1795. package/packages/web/dist/viewer/views/analysis.js.map +1 -0
  1796. package/packages/web/dist/viewer/views/architecture.d.ts +10 -0
  1797. package/packages/web/dist/viewer/views/architecture.js +44 -0
  1798. package/packages/web/dist/viewer/views/architecture.js.map +1 -0
  1799. package/packages/web/dist/viewer/views/call-graph.d.ts +20 -0
  1800. package/packages/web/dist/viewer/views/call-graph.js +1266 -0
  1801. package/packages/web/dist/viewer/views/call-graph.js.map +1 -0
  1802. package/packages/web/dist/viewer/views/domain-hench.d.ts +13 -0
  1803. package/packages/web/dist/viewer/views/domain-hench.js +14 -0
  1804. package/packages/web/dist/viewer/views/domain-hench.js.map +1 -0
  1805. package/packages/web/dist/viewer/views/domain-rex.d.ts +17 -0
  1806. package/packages/web/dist/viewer/views/domain-rex.js +18 -0
  1807. package/packages/web/dist/viewer/views/domain-rex.js.map +1 -0
  1808. package/packages/web/dist/viewer/views/domain-settings.d.ts +12 -0
  1809. package/packages/web/dist/viewer/views/domain-settings.js +13 -0
  1810. package/packages/web/dist/viewer/views/domain-settings.js.map +1 -0
  1811. package/packages/web/dist/viewer/views/domain-sourcevision.d.ts +20 -0
  1812. package/packages/web/dist/viewer/views/domain-sourcevision.js +21 -0
  1813. package/packages/web/dist/viewer/views/domain-sourcevision.js.map +1 -0
  1814. package/packages/web/dist/viewer/views/enrichment-thresholds.d.ts +11 -0
  1815. package/packages/web/dist/viewer/views/enrichment-thresholds.js +12 -0
  1816. package/packages/web/dist/viewer/views/enrichment-thresholds.js.map +1 -0
  1817. package/packages/web/dist/viewer/views/feature-toggles.d.ts +13 -0
  1818. package/packages/web/dist/viewer/views/feature-toggles.js +185 -0
  1819. package/packages/web/dist/viewer/views/feature-toggles.js.map +1 -0
  1820. package/packages/web/dist/viewer/views/files.d.ts +13 -0
  1821. package/packages/web/dist/viewer/views/files.js +174 -0
  1822. package/packages/web/dist/viewer/views/files.js.map +1 -0
  1823. package/packages/web/dist/viewer/views/graph.d.ts +12 -0
  1824. package/packages/web/dist/viewer/views/graph.js +316 -0
  1825. package/packages/web/dist/viewer/views/graph.js.map +1 -0
  1826. package/packages/web/dist/viewer/views/hench-config.d.ts +39 -0
  1827. package/packages/web/dist/viewer/views/hench-config.js +473 -0
  1828. package/packages/web/dist/viewer/views/hench-config.js.map +1 -0
  1829. package/packages/web/dist/viewer/views/hench-runs.d.ts +19 -0
  1830. package/packages/web/dist/viewer/views/hench-runs.js +460 -0
  1831. package/packages/web/dist/viewer/views/hench-runs.js.map +1 -0
  1832. package/packages/web/dist/viewer/views/hench-templates.d.ts +17 -0
  1833. package/packages/web/dist/viewer/views/hench-templates.js +262 -0
  1834. package/packages/web/dist/viewer/views/hench-templates.js.map +1 -0
  1835. package/packages/web/dist/viewer/views/integration-config.d.ts +73 -0
  1836. package/packages/web/dist/viewer/views/integration-config.js +524 -0
  1837. package/packages/web/dist/viewer/views/integration-config.js.map +1 -0
  1838. package/packages/web/dist/viewer/views/notion-config.d.ts +16 -0
  1839. package/packages/web/dist/viewer/views/notion-config.js +357 -0
  1840. package/packages/web/dist/viewer/views/notion-config.js.map +1 -0
  1841. package/packages/web/dist/viewer/views/overview.d.ts +10 -0
  1842. package/packages/web/dist/viewer/views/overview.js +187 -0
  1843. package/packages/web/dist/viewer/views/overview.js.map +1 -0
  1844. package/packages/web/dist/viewer/views/pr-markdown.d.ts +3 -0
  1845. package/packages/web/dist/viewer/views/pr-markdown.js +350 -0
  1846. package/packages/web/dist/viewer/views/pr-markdown.js.map +1 -0
  1847. package/packages/web/dist/viewer/views/prd.d.ts +34 -0
  1848. package/packages/web/dist/viewer/views/prd.js +257 -0
  1849. package/packages/web/dist/viewer/views/prd.js.map +1 -0
  1850. package/packages/web/dist/viewer/views/problems.d.ts +8 -0
  1851. package/packages/web/dist/viewer/views/problems.js +50 -0
  1852. package/packages/web/dist/viewer/views/problems.js.map +1 -0
  1853. package/packages/web/dist/viewer/views/rex-dashboard.d.ts +14 -0
  1854. package/packages/web/dist/viewer/views/rex-dashboard.js +334 -0
  1855. package/packages/web/dist/viewer/views/rex-dashboard.js.map +1 -0
  1856. package/packages/web/dist/viewer/views/routes.d.ts +8 -0
  1857. package/packages/web/dist/viewer/views/routes.js +216 -0
  1858. package/packages/web/dist/viewer/views/routes.js.map +1 -0
  1859. package/packages/web/dist/viewer/views/sourcevision-tabs.d.ts +18 -0
  1860. package/packages/web/dist/viewer/views/sourcevision-tabs.js +14 -0
  1861. package/packages/web/dist/viewer/views/sourcevision-tabs.js.map +1 -0
  1862. package/packages/web/dist/viewer/views/suggestions.d.ts +8 -0
  1863. package/packages/web/dist/viewer/views/suggestions.js +36 -0
  1864. package/packages/web/dist/viewer/views/suggestions.js.map +1 -0
  1865. package/packages/web/dist/viewer/views/task-audit.d.ts +18 -0
  1866. package/packages/web/dist/viewer/views/task-audit.js +413 -0
  1867. package/packages/web/dist/viewer/views/task-audit.js.map +1 -0
  1868. package/packages/web/dist/viewer/views/token-usage.d.ts +10 -0
  1869. package/packages/web/dist/viewer/views/token-usage.js +410 -0
  1870. package/packages/web/dist/viewer/views/token-usage.js.map +1 -0
  1871. package/packages/web/dist/viewer/views/validation.d.ts +11 -0
  1872. package/packages/web/dist/viewer/views/validation.js +475 -0
  1873. package/packages/web/dist/viewer/views/validation.js.map +1 -0
  1874. package/packages/web/dist/viewer/views/view-registry.d.ts +27 -0
  1875. package/packages/web/dist/viewer/views/view-registry.js +70 -0
  1876. package/packages/web/dist/viewer/views/view-registry.js.map +1 -0
  1877. package/packages/web/dist/viewer/views/workflow-optimization.d.ts +12 -0
  1878. package/packages/web/dist/viewer/views/workflow-optimization.js +311 -0
  1879. package/packages/web/dist/viewer/views/workflow-optimization.js.map +1 -0
  1880. package/packages/web/dist/viewer/views/zone-types.d.ts +69 -0
  1881. package/packages/web/dist/viewer/views/zone-types.js +5 -0
  1882. package/packages/web/dist/viewer/views/zone-types.js.map +1 -0
  1883. package/packages/web/dist/viewer/views/zones.d.ts +50 -0
  1884. package/packages/web/dist/viewer/views/zones.js +1438 -0
  1885. package/packages/web/dist/viewer/views/zones.js.map +1 -0
  1886. package/packages/web/dist/viewer/visualization/colors.d.ts +16 -0
  1887. package/packages/web/dist/viewer/visualization/colors.js +31 -0
  1888. package/packages/web/dist/viewer/visualization/colors.js.map +1 -0
  1889. package/packages/web/dist/viewer/visualization/flow.d.ts +54 -0
  1890. package/packages/web/dist/viewer/visualization/flow.js +123 -0
  1891. package/packages/web/dist/viewer/visualization/flow.js.map +1 -0
  1892. package/packages/web/dist/viewer/visualization/index.d.ts +34 -0
  1893. package/packages/web/dist/viewer/visualization/index.js +40 -0
  1894. package/packages/web/dist/viewer/visualization/index.js.map +1 -0
  1895. package/packages/web/dist/viewer/visualization/metrics.d.ts +8 -0
  1896. package/packages/web/dist/viewer/visualization/metrics.js +16 -0
  1897. package/packages/web/dist/viewer/visualization/metrics.js.map +1 -0
  1898. package/packages/web/package.json +53 -0
  1899. package/refresh-artifacts.js +54 -0
  1900. package/refresh-plan.js +79 -0
  1901. package/refresh-validate.js +175 -0
  1902. package/web.js +458 -0
@@ -0,0 +1,1538 @@
1
+ /**
2
+ * Deterministic zone analyzer using Louvain community detection.
3
+ *
4
+ * Zones represent natural architectural boundaries discovered from the import
5
+ * graph. Each zone has two key metrics:
6
+ *
7
+ * - **Cohesion** (0–1): ratio of internal edges to total edges from the zone.
8
+ * A value of 1.0 means all imports stay within the zone — perfect encapsulation.
9
+ *
10
+ * - **Coupling** (0–1): ratio of external edges to total edges. A value of 0.0
11
+ * means no imports cross the zone boundary — complete independence.
12
+ *
13
+ * These metrics validate architectural quality: well-structured packages with
14
+ * clean abstractions naturally achieve high cohesion and low coupling, confirming
15
+ * that the Louvain algorithm correctly identified the intended boundaries.
16
+ *
17
+ * @see {@link "./louvain.ts"} for the community detection algorithm
18
+ * @see {@link generateStructuralInsights} for automated metric interpretation
19
+ */
20
+ import { basename, dirname, extname } from "node:path";
21
+ import { createHash } from "node:crypto";
22
+ import { buildPackageMap, computeCrossRepoCrossings, } from "./workspace-crossings.js";
23
+ import { promoteZones, promoteCrossings, getSubAnalyzedPrefixes, isSubAnalyzedFile, } from "./workspace.js";
24
+ import { sortZonesData } from "../util/sort.js";
25
+ import { buildUndirectedGraph, addDirectoryProximityEdges, louvainPhase1, mergeBidirectionalCoupling, mergeSmallCommunities, mergeSatelliteCommunities, capZoneCount, splitLargeCommunities, } from "./louvain.js";
26
+ import { enrichZonesWithAI, enrichZonesPerZone } from "./enrich.js";
27
+ import { deduplicateFindings, enforceSeverityRules } from "./enrich-parsing.js";
28
+ import { detectPinDivergence, detectImportNeighborMoves } from "./move-recommendations.js";
29
+ // ── Zone ID / name derivation ───────────────────────────────────────────────
30
+ const GENERIC_SEGMENTS = new Set([
31
+ "src",
32
+ "lib",
33
+ "app",
34
+ "packages",
35
+ "internal",
36
+ "pkg",
37
+ ]);
38
+ /** Segments skipped during zone ID derivation (generic + test directories). */
39
+ const SKIPPABLE_SEGMENTS = new Set([
40
+ ...GENERIC_SEGMENTS,
41
+ "tests", "test", "spec", "specs", "mocks",
42
+ ]);
43
+ /**
44
+ * Derive a zone ID from the most common directory segment among files.
45
+ * Root-level files → "root".
46
+ *
47
+ * When `parentId` is provided (for sub-zone derivation), the parent's ID
48
+ * segments are treated as generic and skipped, producing deeper, more
49
+ * specific names (e.g., "agent" instead of "hench").
50
+ */
51
+ export function deriveZoneId(files, parentId) {
52
+ // When deriving sub-zone IDs, treat parent's ID segments as generic
53
+ const skip = parentId
54
+ ? new Set([...SKIPPABLE_SEGMENTS, ...parentId.split("/").map(s => s.toLowerCase())])
55
+ : SKIPPABLE_SEGMENTS;
56
+ const segmentCounts = new Map();
57
+ for (const file of files) {
58
+ const dir = dirname(file);
59
+ if (dir === ".") {
60
+ segmentCounts.set("root", (segmentCounts.get("root") ?? 0) + 1);
61
+ continue;
62
+ }
63
+ const parts = dir.split("/");
64
+ // Find first non-skip segment
65
+ let found = false;
66
+ for (const part of parts) {
67
+ const normalized = part.toLowerCase().replace(/_/g, "-").replace(/^-+|-+$/g, "");
68
+ if (!normalized || skip.has(part) || skip.has(normalized))
69
+ continue;
70
+ segmentCounts.set(normalized, (segmentCounts.get(normalized) ?? 0) + 1);
71
+ found = true;
72
+ break;
73
+ }
74
+ // If all segments were skipped, use the last one
75
+ if (!found && parts.length > 0) {
76
+ const last = parts[parts.length - 1];
77
+ const normalized = last.toLowerCase().replace(/_/g, "-").replace(/^-+|-+$/g, "");
78
+ if (normalized) {
79
+ segmentCounts.set(normalized, (segmentCounts.get(normalized) ?? 0) + 1);
80
+ }
81
+ }
82
+ }
83
+ if (segmentCounts.size === 0)
84
+ return "root";
85
+ // Most common segment, tie-break lexicographic
86
+ let bestSegment = "root";
87
+ let bestCount = 0;
88
+ for (const [seg, count] of segmentCounts) {
89
+ if (count > bestCount || (count === bestCount && seg < bestSegment)) {
90
+ bestSegment = seg;
91
+ bestCount = count;
92
+ }
93
+ }
94
+ return bestSegment;
95
+ }
96
+ /**
97
+ * Disambiguate a zone ID by finding the most common path segment that
98
+ * appears AFTER the baseId segment in file paths. Returns `${baseId}-${next}`
99
+ * (e.g., "routes-admin") or just `baseId` if no discriminator found.
100
+ */
101
+ export function disambiguateZoneId(baseId, files, parentId) {
102
+ const parentSegments = parentId
103
+ ? new Set(parentId.split("/").map(s => s.toLowerCase()))
104
+ : new Set();
105
+ const nextCounts = new Map();
106
+ for (const file of files) {
107
+ const parts = dirname(file).split("/");
108
+ // Find the index of the baseId segment
109
+ let baseIdx = -1;
110
+ for (let i = 0; i < parts.length; i++) {
111
+ const normalized = parts[i].toLowerCase().replace(/_/g, "-").replace(/^-+|-+$/g, "");
112
+ if (normalized === baseId) {
113
+ baseIdx = i;
114
+ break;
115
+ }
116
+ }
117
+ if (baseIdx === -1)
118
+ continue;
119
+ // Look for the first meaningful segment after baseId
120
+ for (let i = baseIdx + 1; i < parts.length; i++) {
121
+ const normalized = parts[i].toLowerCase().replace(/_/g, "-").replace(/^-+|-+$/g, "");
122
+ if (!normalized ||
123
+ SKIPPABLE_SEGMENTS.has(normalized) ||
124
+ parentSegments.has(normalized)) {
125
+ continue;
126
+ }
127
+ nextCounts.set(normalized, (nextCounts.get(normalized) ?? 0) + 1);
128
+ break;
129
+ }
130
+ }
131
+ if (nextCounts.size === 0)
132
+ return baseId;
133
+ // Pick the most common next segment, tie-break lexicographic
134
+ let bestSegment = "";
135
+ let bestCount = 0;
136
+ for (const [seg, count] of nextCounts) {
137
+ if (count > bestCount || (count === bestCount && seg < bestSegment)) {
138
+ bestSegment = seg;
139
+ bestCount = count;
140
+ }
141
+ }
142
+ return bestSegment ? `${baseId}-${bestSegment}` : baseId;
143
+ }
144
+ /** Words skipped during filename-based zone ID derivation (too generic). */
145
+ const FILENAME_SKIP_WORDS = new Set([
146
+ "test", "spec", "index", "utils", "helpers", "types",
147
+ "config", "constants", "main", "app", "mod", "lib",
148
+ ]);
149
+ /**
150
+ * Derive a zone ID from the dominant theme word in filename stems.
151
+ * Used as a fallback when directory-based derivation produces duplicate IDs.
152
+ *
153
+ * Algorithm:
154
+ * 1. Filter out test files (*.test.ts, *.spec.ts)
155
+ * 2. Extract filename stems, split by `-`, `_`, and camelCase boundaries
156
+ * 3. Skip generic words (index, utils, types, etc.)
157
+ * 4. Count word frequency (deduplicated per file)
158
+ * 5. Return the most common word if it appears in ≥30% of source files (min 2 files)
159
+ * 6. Tie-break lexicographically for determinism
160
+ */
161
+ export function deriveZoneIdFromFilenames(files) {
162
+ // Filter out test files
163
+ const sourceFiles = files.filter((f) => !f.endsWith(".test.ts") && !f.endsWith(".spec.ts")
164
+ && !f.endsWith(".test.js") && !f.endsWith(".spec.js")
165
+ && !f.endsWith(".test.tsx") && !f.endsWith(".spec.tsx"));
166
+ if (sourceFiles.length < 2)
167
+ return null;
168
+ const wordCounts = new Map();
169
+ for (const file of sourceFiles) {
170
+ const stem = basename(file).replace(/\.[^.]+$/, "");
171
+ // Split by `-`, `_`, and camelCase boundaries
172
+ const words = stem
173
+ .replace(/([a-z])([A-Z])/g, "$1 $2")
174
+ .toLowerCase()
175
+ .split(/[-_\s]+/)
176
+ .filter((w) => w.length > 1 && !FILENAME_SKIP_WORDS.has(w));
177
+ // Deduplicate per file
178
+ const unique = new Set(words);
179
+ for (const word of unique) {
180
+ wordCounts.set(word, (wordCounts.get(word) ?? 0) + 1);
181
+ }
182
+ }
183
+ if (wordCounts.size === 0)
184
+ return null;
185
+ // Find the most common word, tie-break lexicographically
186
+ let bestWord = "";
187
+ let bestCount = 0;
188
+ for (const [word, count] of wordCounts) {
189
+ if (count > bestCount || (count === bestCount && word < bestWord)) {
190
+ bestWord = word;
191
+ bestCount = count;
192
+ }
193
+ }
194
+ // Must appear in ≥30% of source files and at least 2 files
195
+ const threshold = Math.max(2, Math.ceil(sourceFiles.length * 0.3));
196
+ if (bestCount < threshold)
197
+ return null;
198
+ return bestWord;
199
+ }
200
+ /**
201
+ * Title-case a zone ID: "detail-panel" → "Detail Panel"
202
+ */
203
+ export function deriveZoneName(id) {
204
+ return id
205
+ .split("-")
206
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
207
+ .join(" ");
208
+ }
209
+ // ── Generic zone name detection ──────────────────────────────────────────────
210
+ const GENERIC_BASES = new Set([
211
+ "src", "lib", "app", "packages", "internal", "pkg",
212
+ "root", "tests", "test", "spec", "specs", "mocks",
213
+ "source", "library", "application", "package",
214
+ ]);
215
+ function isGenericZoneName(name, id) {
216
+ // "Src 2", "Lib 3" etc — generic base + numeric suffix
217
+ const match = name.match(/^(\w+)\s+(\d+)$/);
218
+ if (match && GENERIC_BASES.has(match[1].toLowerCase()))
219
+ return true;
220
+ // Name unchanged from algorithmic default when ID has numeric suffix
221
+ if (/-\d+$/.test(id) && name === deriveZoneName(id))
222
+ return true;
223
+ return false;
224
+ }
225
+ // ── Zone description from language stats ────────────────────────────────────
226
+ function describeZone(files, inventory) {
227
+ const langCounts = new Map();
228
+ const fileSet = new Set(files);
229
+ for (const entry of inventory.files) {
230
+ if (fileSet.has(entry.path)) {
231
+ langCounts.set(entry.language, (langCounts.get(entry.language) ?? 0) + 1);
232
+ }
233
+ }
234
+ const sorted = [...langCounts.entries()].sort((a, b) => b[1] - a[1]);
235
+ const topLangs = sorted.slice(0, 3).map(([lang]) => lang);
236
+ const langStr = topLangs.length > 0 ? topLangs.join(", ") : "mixed";
237
+ return `${files.length} files, primarily ${langStr}`;
238
+ }
239
+ // ── Directory proximity assignment ──────────────────────────────────────────
240
+ /**
241
+ * Assign unzoned files to their nearest zone by directory proximity.
242
+ * Walks up each file's directory tree until finding a directory containing
243
+ * files from an existing zone.
244
+ */
245
+ export function assignByProximity(zones, unzonedFiles, maxZoneSize) {
246
+ if (unzonedFiles.length === 0 || zones.length === 0) {
247
+ return { zones, remaining: unzonedFiles };
248
+ }
249
+ // Index: exact directory → zone ID → count of zone files in that directory
250
+ const dirZones = new Map();
251
+ for (const zone of zones) {
252
+ for (const file of zone.files) {
253
+ const dir = dirname(file);
254
+ let counts = dirZones.get(dir);
255
+ if (!counts) {
256
+ counts = new Map();
257
+ dirZones.set(dir, counts);
258
+ }
259
+ counts.set(zone.id, (counts.get(zone.id) ?? 0) + 1);
260
+ }
261
+ }
262
+ const assignments = new Map(); // zoneId → files to add
263
+ const remaining = [];
264
+ // Track pending additions per zone to enforce size cap
265
+ const pendingCounts = new Map();
266
+ const zoneSizes = new Map();
267
+ for (const zone of zones) {
268
+ zoneSizes.set(zone.id, zone.files.length);
269
+ }
270
+ for (const file of [...unzonedFiles].sort()) {
271
+ let dir = dirname(file);
272
+ let assigned = false;
273
+ while (dir && dir !== ".") {
274
+ const counts = dirZones.get(dir);
275
+ if (counts && counts.size > 0) {
276
+ // Pick zone with most files in this directory, tie-break by ID
277
+ // Skip zones that are already at the size cap
278
+ let bestZone = "";
279
+ let bestCount = 0;
280
+ for (const [zoneId, count] of counts) {
281
+ if (maxZoneSize) {
282
+ const currentSize = (zoneSizes.get(zoneId) ?? 0) + (pendingCounts.get(zoneId) ?? 0);
283
+ if (currentSize >= maxZoneSize)
284
+ continue;
285
+ }
286
+ if (count > bestCount || (count === bestCount && zoneId < bestZone)) {
287
+ bestZone = zoneId;
288
+ bestCount = count;
289
+ }
290
+ }
291
+ if (!bestZone) {
292
+ // All candidate zones in this directory are full, try parent
293
+ const parent = dirname(dir);
294
+ if (parent === dir)
295
+ break;
296
+ dir = parent;
297
+ continue;
298
+ }
299
+ let list = assignments.get(bestZone);
300
+ if (!list) {
301
+ list = [];
302
+ assignments.set(bestZone, list);
303
+ }
304
+ list.push(file);
305
+ pendingCounts.set(bestZone, (pendingCounts.get(bestZone) ?? 0) + 1);
306
+ assigned = true;
307
+ break;
308
+ }
309
+ const parent = dirname(dir);
310
+ if (parent === dir)
311
+ break;
312
+ dir = parent;
313
+ }
314
+ if (!assigned) {
315
+ remaining.push(file);
316
+ }
317
+ }
318
+ // Build expanded zones with proximity-assigned files appended
319
+ const expandedZones = zones.map((zone) => {
320
+ const extraFiles = assignments.get(zone.id);
321
+ if (!extraFiles || extraFiles.length === 0)
322
+ return zone;
323
+ return { ...zone, files: [...zone.files, ...extraFiles] };
324
+ });
325
+ return { zones: expandedZones, remaining };
326
+ }
327
+ // ── Zone pinning ─────────────────────────────────────────────────────────────
328
+ /**
329
+ * Apply manual zone pins by moving files from their detected zone to the
330
+ * pinned target zone. Files whose target zone doesn't exist are skipped.
331
+ * This runs after Louvain detection and proximity assignment.
332
+ */
333
+ export function applyZonePins(zones, pins) {
334
+ // Build file → source zone index
335
+ const fileToZoneIdx = new Map();
336
+ for (let i = 0; i < zones.length; i++) {
337
+ for (const f of zones[i].files) {
338
+ fileToZoneIdx.set(f, i);
339
+ }
340
+ }
341
+ // Build zone ID → index
342
+ const zoneIdToIdx = new Map();
343
+ for (let i = 0; i < zones.length; i++) {
344
+ zoneIdToIdx.set(zones[i].id, i);
345
+ }
346
+ // Collect moves: [file, sourceIdx, targetIdx]
347
+ const moves = [];
348
+ for (const [file, targetZoneId] of Object.entries(pins)) {
349
+ const sourceIdx = fileToZoneIdx.get(file);
350
+ const targetIdx = zoneIdToIdx.get(targetZoneId);
351
+ if (sourceIdx === undefined || targetIdx === undefined)
352
+ continue;
353
+ if (sourceIdx === targetIdx)
354
+ continue; // already in target zone
355
+ moves.push([file, sourceIdx, targetIdx]);
356
+ }
357
+ if (moves.length === 0)
358
+ return zones;
359
+ // Apply moves immutably
360
+ const result = zones.map((z) => ({ ...z, files: [...z.files] }));
361
+ for (const [file, sourceIdx, targetIdx] of moves) {
362
+ const srcFiles = result[sourceIdx].files;
363
+ const idx = srcFiles.indexOf(file);
364
+ if (idx !== -1)
365
+ srcFiles.splice(idx, 1);
366
+ result[targetIdx].files.push(file);
367
+ }
368
+ // Remove zones that became empty
369
+ return result.filter((z) => z.files.length > 0);
370
+ }
371
+ // ── Recursive subdivision ────────────────────────────────────────────────────
372
+ /** Zones with more than this many files are subdivided recursively. */
373
+ export const SUBDIVISION_THRESHOLD = 50;
374
+ /** Maximum recursion depth for subdivision to prevent infinite loops. */
375
+ export const MAX_SUBDIVISION_DEPTH = 3;
376
+ /**
377
+ * Subdivide a large zone by running the full zone pipeline on its internal
378
+ * import graph. Returns sub-zones with IDs prefixed by parent zone ID.
379
+ *
380
+ * Uses the same algorithm at every zoom level (resolution escalation,
381
+ * proximity edges, splitLargeCommunities, mergeSameIdCommunities) and
382
+ * stores cross-sub-zone edges on `zone.subCrossings`.
383
+ */
384
+ export function subdivideZone(zone, imports, inventory, testFiles = new Set(), depth = 0) {
385
+ // Don't subdivide small zones or if we've hit max depth
386
+ if (zone.files.length < SUBDIVISION_THRESHOLD || depth >= MAX_SUBDIVISION_DEPTH) {
387
+ return [];
388
+ }
389
+ const fileSet = new Set(zone.files);
390
+ // Extract edges internal to this zone
391
+ const internalEdges = imports.edges.filter((e) => fileSet.has(e.from) && fileSet.has(e.to));
392
+ // Need at least some edges to cluster
393
+ if (internalEdges.length < 3) {
394
+ return [];
395
+ }
396
+ // Run full pipeline on the zone's internal graph
397
+ const result = runZonePipeline({
398
+ edges: internalEdges,
399
+ inventory,
400
+ imports,
401
+ scopeFiles: zone.files,
402
+ maxZones: 8,
403
+ parentId: zone.id,
404
+ depth: depth + 1,
405
+ testFiles,
406
+ });
407
+ // If pipeline found only 1 or 0 zones, no meaningful subdivision
408
+ if (result.zones.length <= 1) {
409
+ return [];
410
+ }
411
+ // Store sub-crossings on parent zone
412
+ if (result.crossings.length > 0) {
413
+ zone.subCrossings = result.crossings;
414
+ }
415
+ return result.zones;
416
+ }
417
+ // ── Structure hash ──────────────────────────────────────────────────────────
418
+ /**
419
+ * Hash the structural zone groupings for change detection between runs.
420
+ * Same codebase + same imports → same hash → safe to preserve previous insights.
421
+ */
422
+ export function computeStructureHash(zones) {
423
+ const data = zones
424
+ .map((z) => [...z.files].sort().join("\n"))
425
+ .sort()
426
+ .join("\0");
427
+ return createHash("sha256").update(data).digest("hex").slice(0, 16);
428
+ }
429
+ /**
430
+ * Hash a zone's file contents for change detection between runs.
431
+ * Uses inventory content hashes (already computed) so we detect code changes
432
+ * even when the zone structure (file membership) stays the same.
433
+ */
434
+ export function computeZoneContentHash(zone, fileHashes) {
435
+ const data = [...zone.files]
436
+ .sort()
437
+ .map((f) => `${f}\0${fileHashes.get(f) ?? ""}`)
438
+ .join("\n");
439
+ return createHash("sha256").update(data).digest("hex").slice(0, 16);
440
+ }
441
+ // Imported from zone-hash.ts to break circular dependency with enrich.ts.
442
+ // Both zones.ts and enrich.ts need this function; placing it in a third
443
+ // module prevents the cycle.
444
+ import { computeGlobalContentHash } from "./zone-hash.js";
445
+ export { computeGlobalContentHash } from "./zone-hash.js";
446
+ // ── Structural insights ─────────────────────────────────────────────────────
447
+ /**
448
+ * Generate deterministic, actionable insights from graph metrics.
449
+ *
450
+ * Recomputed every run — same structure always produces the same insights.
451
+ * These insights translate raw cohesion/coupling numbers into architectural
452
+ * guidance:
453
+ *
454
+ * - **Isolated files**: multiple files with no import edges — cohesion is
455
+ * unmeasurable (reported as 0). Not inherently bad, but the grouping is
456
+ * based on proximity rather than structural evidence.
457
+ * - **High cohesion** (≥0.8): files are tightly interconnected — good sign.
458
+ * Perfect cohesion (1.0) means the zone is fully self-contained.
459
+ * - **Low cohesion** (<0.4): files are loosely related — consider splitting.
460
+ * - **High coupling** (>0.5): heavy cross-zone imports — may need refactoring.
461
+ * - **Size imbalance**: uneven zone sizes suggest decomposition issues.
462
+ * - **Large zone with sub-zones**: zones exceeding 35% of project files that
463
+ * have been successfully subdivided get an informational insight rather than
464
+ * a "consider splitting" warning — the subdivision already addresses breadth.
465
+ * - **Hub files**: files imported across 3+ zones are cross-cutting dependencies.
466
+ * - **Bidirectional coupling**: zone pairs that import from each other.
467
+ *
468
+ * When all connected zones achieve perfect cohesion, it validates that the
469
+ * Louvain community detection successfully identified the codebase's natural
470
+ * architectural boundaries. Isolated-file zones (cohesion 0) are excluded
471
+ * from this assessment — their grouping is proximity-based, not structural.
472
+ */
473
+ export function generateStructuralInsights(zones, crossings, imports, totalFiles, callGraphStats, filenameBasedZoneIds) {
474
+ const zoneInsights = new Map();
475
+ const globalInsights = [];
476
+ const findings = [];
477
+ for (const zone of zones) {
478
+ zoneInsights.set(zone.id, []);
479
+ }
480
+ collectPerZoneInsights(zones, crossings, totalFiles, zoneInsights);
481
+ collectHubFileInsights(crossings, globalInsights);
482
+ collectBidirectionalCouplingInsights(crossings, globalInsights);
483
+ collectSizeImbalanceInsights(zones, globalInsights);
484
+ collectCircularDependencyInsights(imports, globalInsights);
485
+ if (callGraphStats) {
486
+ collectCallGraphInsights(zones, callGraphStats, zoneInsights, globalInsights);
487
+ }
488
+ collectFileStructureFindings(zones, filenameBasedZoneIds, findings);
489
+ return { zoneInsights, globalInsights, findings };
490
+ }
491
+ // ── Per-zone metric insights ────────────────────────────────────────────────
492
+ /** Cohesion, coupling, size, entry point, and naming insights per zone. */
493
+ function collectPerZoneInsights(zones, crossings, totalFiles, zoneInsights) {
494
+ for (const zone of zones) {
495
+ const insights = zoneInsights.get(zone.id);
496
+ const pct = totalFiles > 0
497
+ ? Math.round((zone.files.length / totalFiles) * 100)
498
+ : 0;
499
+ if (zone.cohesion === 0 && zone.coupling === 0 && zone.files.length > 1) {
500
+ insights.push(`Isolated files — no import edges between ${zone.files.length} files, cohesion is unmeasurable (reported as 0)`);
501
+ }
502
+ else if (zone.cohesion >= 0.8) {
503
+ insights.push(`High cohesion (${zone.cohesion}) — files are tightly interconnected`);
504
+ }
505
+ else if (zone.cohesion < 0.4 && zone.files.length > 3) {
506
+ insights.push(`Low cohesion (${zone.cohesion}) — files are loosely related, consider splitting this zone`);
507
+ }
508
+ if (zone.coupling > 0.5) {
509
+ const targetCounts = new Map();
510
+ for (const c of crossings) {
511
+ if (c.fromZone === zone.id) {
512
+ targetCounts.set(c.toZone, (targetCounts.get(c.toZone) ?? 0) + 1);
513
+ }
514
+ }
515
+ const sorted = [...targetCounts.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));
516
+ if (sorted.length > 0) {
517
+ insights.push(`High coupling (${zone.coupling}) — ${sorted[0][1]} imports target "${sorted[0][0]}"`);
518
+ }
519
+ }
520
+ if (pct > 35) {
521
+ if (zone.subZones && zone.subZones.length > 1) {
522
+ insights.push(`Contains ${pct}% of project files (${zone.files.length}/${totalFiles}) — subdivided into ${zone.subZones.length} sub-zones`);
523
+ }
524
+ else {
525
+ insights.push(`Contains ${pct}% of project files (${zone.files.length}/${totalFiles}) — may be too broad, consider splitting`);
526
+ }
527
+ }
528
+ if (zone.entryPoints.length > 8) {
529
+ insights.push(`${zone.entryPoints.length} entry points — wide API surface, consider consolidating exports`);
530
+ }
531
+ if (isGenericZoneName(zone.name, zone.id)) {
532
+ insights.push(`Generic zone name "${zone.name}" — enrichment did not assign a meaningful name reflecting this zone's domain purpose`);
533
+ }
534
+ }
535
+ }
536
+ // ── Hub file detection ──────────────────────────────────────────────────────
537
+ /** Find files imported across 3+ zones (cross-cutting dependencies). */
538
+ function collectHubFileInsights(crossings, globalInsights) {
539
+ const fileImportingZones = new Map();
540
+ for (const c of crossings) {
541
+ let set = fileImportingZones.get(c.to);
542
+ if (!set) {
543
+ set = new Set();
544
+ fileImportingZones.set(c.to, set);
545
+ }
546
+ set.add(c.fromZone);
547
+ }
548
+ const hubFiles = [...fileImportingZones.entries()]
549
+ .filter(([, s]) => s.size >= 3)
550
+ .sort((a, b) => b[1].size - a[1].size || a[0].localeCompare(b[0]));
551
+ for (const [file, importingZones] of hubFiles.slice(0, 3)) {
552
+ globalInsights.push(`Hub: ${file} is imported by ${importingZones.size} zones — cross-cutting dependency`);
553
+ }
554
+ }
555
+ // ── Bidirectional coupling ──────────────────────────────────────────────────
556
+ /** Detect zone pairs that import from each other. */
557
+ function collectBidirectionalCouplingInsights(crossings, globalInsights) {
558
+ const pairCounts = new Map();
559
+ for (const c of crossings) {
560
+ const key = c.fromZone < c.toZone
561
+ ? `${c.fromZone}\0${c.toZone}`
562
+ : `${c.toZone}\0${c.fromZone}`;
563
+ let pair = pairCounts.get(key);
564
+ if (!pair) {
565
+ pair = { ab: 0, ba: 0 };
566
+ pairCounts.set(key, pair);
567
+ }
568
+ if (c.fromZone < c.toZone)
569
+ pair.ab++;
570
+ else
571
+ pair.ba++;
572
+ }
573
+ for (const [key, counts] of [...pairCounts.entries()].sort((a, b) => b[1].ab + b[1].ba - (a[1].ab + a[1].ba))) {
574
+ if (counts.ab > 0 && counts.ba > 0) {
575
+ const [a, b] = key.split("\0");
576
+ globalInsights.push(`Bidirectional coupling: "${a}" \u2194 "${b}" (${counts.ab}+${counts.ba} crossings) — consider extracting shared interface`);
577
+ }
578
+ }
579
+ }
580
+ // ── Zone size imbalance ─────────────────────────────────────────────────────
581
+ /** Flag when largest zone dwarfs smallest (>5× ratio). */
582
+ function collectSizeImbalanceInsights(zones, globalInsights) {
583
+ if (zones.length > 2) {
584
+ const sizes = zones.map((z) => z.files.length).sort((a, b) => a - b);
585
+ if (sizes[sizes.length - 1] > sizes[0] * 5) {
586
+ globalInsights.push(`Size imbalance: largest zone has ${sizes[sizes.length - 1]} files vs smallest with ${sizes[0]} — uneven decomposition`);
587
+ }
588
+ }
589
+ }
590
+ // ── Circular dependency reporting ───────────────────────────────────────────
591
+ /** Surface file-level circular dependency counts from import analysis. */
592
+ function collectCircularDependencyInsights(imports, globalInsights) {
593
+ if (imports.summary.circularCount > 0) {
594
+ globalInsights.push(`${imports.summary.circularCount} circular dependency chain${imports.summary.circularCount > 1 ? "s" : ""} detected — see imports.json for details`);
595
+ }
596
+ }
597
+ /** Per-zone and global insights derived from the function call graph. */
598
+ function collectCallGraphInsights(zones, callGraphStats, zoneInsights, globalInsights) {
599
+ const { zoneStats, crossZonePatterns } = callGraphStats;
600
+ const zoneStatsMap = new Map(zoneStats.map((s) => [s.zoneId, s]));
601
+ // Per-zone call graph insights
602
+ for (const zone of zones) {
603
+ const stats = zoneStatsMap.get(zone.id);
604
+ if (!stats)
605
+ continue;
606
+ const insights = zoneInsights.get(zone.id);
607
+ // Call cohesion divergence from import cohesion
608
+ const cohesionDiff = Math.abs(stats.callCohesion - zone.cohesion);
609
+ if (cohesionDiff > 0.3) {
610
+ if (stats.callCohesion < zone.cohesion) {
611
+ insights.push(`Call cohesion (${stats.callCohesion}) much lower than import cohesion (${zone.cohesion}) — functions call across zone boundaries more than imports suggest`);
612
+ }
613
+ else {
614
+ insights.push(`Call cohesion (${stats.callCohesion}) much higher than import cohesion (${zone.cohesion}) — tighter runtime coupling within zone than import structure suggests`);
615
+ }
616
+ }
617
+ // High incoming call traffic
618
+ if (stats.incomingCalls > 20) {
619
+ insights.push(`${stats.incomingCalls} incoming calls from other zones — heavily depended-on runtime API`);
620
+ }
621
+ }
622
+ // Global cross-zone call patterns
623
+ const topCrossZone = crossZonePatterns.slice(0, 3);
624
+ for (const pattern of topCrossZone) {
625
+ if (pattern.callCount >= 10) {
626
+ globalInsights.push(`Heavy cross-zone calls: "${pattern.fromZone}" → "${pattern.toZone}" (${pattern.callCount} calls) — tight runtime coupling`);
627
+ }
628
+ }
629
+ // Total cross-zone call percentage
630
+ const totalCalls = zoneStats.reduce((s, z) => s + z.internalCalls + z.outgoingCalls, 0);
631
+ const totalCrossZone = zoneStats.reduce((s, z) => s + z.outgoingCalls, 0);
632
+ if (totalCalls > 0) {
633
+ const pct = Math.round((totalCrossZone / totalCalls) * 100);
634
+ if (pct > 40) {
635
+ globalInsights.push(`${pct}% of function calls cross zone boundaries — high runtime inter-zone dependency`);
636
+ }
637
+ }
638
+ }
639
+ // ── File-structure recommendations ──────────────────────────────────────────
640
+ /** Directory-spanning zones, scattered files, and filename-derived zone IDs. */
641
+ function collectFileStructureFindings(zones, filenameBasedZoneIds, findings) {
642
+ // Flat directory spanning 3+ zones
643
+ const dirToZones = new Map();
644
+ for (const zone of zones) {
645
+ for (const f of zone.files) {
646
+ const dir = dirname(f);
647
+ let set = dirToZones.get(dir);
648
+ if (!set) {
649
+ set = new Set();
650
+ dirToZones.set(dir, set);
651
+ }
652
+ set.add(zone.id);
653
+ }
654
+ }
655
+ for (const [dir, zoneSet] of dirToZones) {
656
+ if (zoneSet.size >= 3) {
657
+ const names = [...zoneSet].sort().join(", ");
658
+ findings.push({
659
+ type: "suggestion",
660
+ pass: 0,
661
+ scope: "global",
662
+ text: `${dir}/ contains files from ${zoneSet.size} zones (${names}) — consider grouping into subdirectories to clarify architectural boundaries`,
663
+ severity: "info",
664
+ });
665
+ }
666
+ }
667
+ // Zone with scattered files (5+ directories)
668
+ for (const zone of zones) {
669
+ const dirs = new Set(zone.files.map((f) => dirname(f)));
670
+ if (dirs.size >= 5) {
671
+ findings.push({
672
+ type: "suggestion",
673
+ pass: 0,
674
+ scope: zone.id,
675
+ text: `Zone "${zone.id}" has files across ${dirs.size} directories — consider consolidating under a dedicated directory`,
676
+ severity: "info",
677
+ });
678
+ }
679
+ }
680
+ // Numeric suffix zones — overflow communities requiring pin or merge decision.
681
+ // Mirrors the cross-package residual zone dissolution policy but applies it
682
+ // to intra-package overflow communities (e.g. web-2, src-2, unit-3).
683
+ for (const zone of zones) {
684
+ const leafId = zone.id.includes("/") ? zone.id.split("/").pop() : zone.id;
685
+ if (/-\d+$/.test(leafId)) {
686
+ findings.push({
687
+ type: "suggestion",
688
+ pass: 0,
689
+ scope: zone.id,
690
+ text: `Zone "${leafId}" has a numeric suffix indicating an overflow community — pin its files to a named zone or merge with the base zone to eliminate the ambiguous ID`,
691
+ severity: "warning",
692
+ });
693
+ }
694
+ }
695
+ // Filename-derived zone
696
+ if (filenameBasedZoneIds) {
697
+ for (const zoneId of filenameBasedZoneIds) {
698
+ const zone = zones.find((z) => z.id === zoneId);
699
+ if (!zone || zone.files.length === 0)
700
+ continue;
701
+ const primaryDir = dirname(zone.files[0]);
702
+ const leafId = zoneId.includes("/") ? zoneId.split("/").pop() : zoneId;
703
+ findings.push({
704
+ type: "suggestion",
705
+ pass: 0,
706
+ scope: zoneId,
707
+ text: `Zone "${leafId}" was identified from filename patterns, not directory structure — consider creating ${primaryDir}/${leafId}/ and moving related files there`,
708
+ severity: "info",
709
+ });
710
+ }
711
+ }
712
+ }
713
+ // ── Helper: merge same-ID communities ────────────────────────────────────────
714
+ /**
715
+ * Merge Louvain communities that derive the same zone ID or share the same
716
+ * dominant package root. Prevents a single package from fragmenting into
717
+ * multiple root-level zones (e.g., "rex" + "rex-cli" or "sourcevision" +
718
+ * "sourcevision-tests"). After merging, the combined zone may be subdivided
719
+ * into properly named sub-zones.
720
+ */
721
+ function mergeSameIdCommunities(community, maxSize) {
722
+ const tempMembers = new Map();
723
+ for (const [node, comm] of community) {
724
+ let list = tempMembers.get(comm);
725
+ if (!list) {
726
+ list = [];
727
+ tempMembers.set(comm, list);
728
+ }
729
+ list.push(node);
730
+ }
731
+ // Pass 1: merge communities with the same derived zone ID
732
+ mergeByKey(community, tempMembers, (members) => deriveZoneId(members), maxSize);
733
+ // Rebuild member map after pass 1 (community assignments may have changed)
734
+ tempMembers.clear();
735
+ for (const [node, comm] of community) {
736
+ let list = tempMembers.get(comm);
737
+ if (!list) {
738
+ list = [];
739
+ tempMembers.set(comm, list);
740
+ }
741
+ list.push(node);
742
+ }
743
+ // Pass 2: merge communities whose files predominantly share the same
744
+ // package root (e.g., packages/rex/src/* and packages/rex/tests/*)
745
+ mergeByKey(community, tempMembers, (members) => dominantPackageRoot(members), maxSize);
746
+ }
747
+ /**
748
+ * Generic community merger: group communities by a key derived from their
749
+ * members, then merge all communities that share the same non-null key into
750
+ * the largest one.
751
+ *
752
+ * When `maxSize` is provided, merges that would create a community exceeding
753
+ * the limit are skipped — this prevents the same-ID merge from undoing
754
+ * size-based splits.
755
+ */
756
+ function mergeByKey(community, tempMembers, keyFn, maxSize) {
757
+ const keyToCommunities = new Map();
758
+ for (const [comm, members] of tempMembers) {
759
+ const key = keyFn(members);
760
+ if (!key)
761
+ continue;
762
+ let list = keyToCommunities.get(key);
763
+ if (!list) {
764
+ list = [];
765
+ keyToCommunities.set(key, list);
766
+ }
767
+ list.push(comm);
768
+ }
769
+ for (const [, comms] of keyToCommunities) {
770
+ if (comms.length <= 1)
771
+ continue;
772
+ comms.sort((a, b) => {
773
+ const sizeA = tempMembers.get(a)?.length ?? 0;
774
+ const sizeB = tempMembers.get(b)?.length ?? 0;
775
+ return sizeB - sizeA || a.localeCompare(b);
776
+ });
777
+ const target = comms[0];
778
+ let targetSize = tempMembers.get(target)?.length ?? 0;
779
+ for (let i = 1; i < comms.length; i++) {
780
+ const sourceMembers = tempMembers.get(comms[i]);
781
+ // Skip merge if it would exceed the max zone size policy
782
+ if (maxSize && targetSize + sourceMembers.length > maxSize)
783
+ continue;
784
+ for (const node of sourceMembers) {
785
+ community.set(node, target);
786
+ }
787
+ targetSize += sourceMembers.length;
788
+ }
789
+ }
790
+ }
791
+ /**
792
+ * Determine the dominant package root for a set of files.
793
+ * Returns the `packages/<name>` prefix if ≥70% of files share it, else null.
794
+ * This prevents artificial splits within a single domain package.
795
+ */
796
+ function dominantPackageRoot(files) {
797
+ if (files.length === 0)
798
+ return null;
799
+ const rootCounts = new Map();
800
+ for (const file of files) {
801
+ const parts = file.split("/");
802
+ if (parts.length >= 2 && parts[0] === "packages") {
803
+ const root = `packages/${parts[1]}`;
804
+ rootCounts.set(root, (rootCounts.get(root) ?? 0) + 1);
805
+ }
806
+ }
807
+ if (rootCounts.size === 0)
808
+ return null;
809
+ // Find the most common package root
810
+ let bestRoot = "";
811
+ let bestCount = 0;
812
+ for (const [root, count] of rootCounts) {
813
+ if (count > bestCount || (count === bestCount && root < bestRoot)) {
814
+ bestRoot = root;
815
+ bestCount = count;
816
+ }
817
+ }
818
+ // Only merge if the dominant root covers ≥70% of the community's files
819
+ const ratio = bestCount / files.length;
820
+ return ratio >= 0.7 ? bestRoot : null;
821
+ }
822
+ // ── Helper: compute zone metrics ─────────────────────────────────────────────
823
+ /**
824
+ * Compute cohesion and coupling metrics for a set of files in a zone.
825
+ * Test files are excluded from the calculation — both as iteration sources
826
+ * and as neighbors — because test→source and source→test edges represent
827
+ * test dependencies, not architectural coupling. Without this exclusion,
828
+ * zones with many test files (e.g. E2E suites) produce misleading metrics
829
+ * where test-file neighbors inflate internal/external edge counts.
830
+ */
831
+ function computeZoneMetrics(files, graph, testFiles) {
832
+ const memberSet = new Set(files);
833
+ let internalEdgeCount = 0;
834
+ let totalEdgesFromZone = 0;
835
+ let productionNodeCount = 0;
836
+ for (const node of files) {
837
+ if (testFiles.has(node))
838
+ continue;
839
+ productionNodeCount++;
840
+ const neighbors = graph.get(node);
841
+ if (!neighbors)
842
+ continue;
843
+ for (const [neighbor] of neighbors) {
844
+ if (testFiles.has(neighbor))
845
+ continue;
846
+ totalEdgesFromZone++;
847
+ if (memberSet.has(neighbor))
848
+ internalEdgeCount++;
849
+ }
850
+ }
851
+ // A zone with ≤1 production files cannot form internal production edges,
852
+ // so cohesion/coupling are structurally meaningless. Return healthy defaults
853
+ // to avoid false-positive risk alerts on test-dominated or single-file zones.
854
+ if (productionNodeCount <= 1) {
855
+ return { cohesion: 1, coupling: 0 };
856
+ }
857
+ // Multiple production files but zero edges: files are completely isolated
858
+ // from each other. Cohesion is 0 (no evidence of relatedness), not 1.
859
+ // Returning 1 here would be a metric artifact — perfect cohesion should
860
+ // require actual internal edges, not merely the absence of external ones.
861
+ if (totalEdgesFromZone === 0) {
862
+ return { cohesion: 0, coupling: 0 };
863
+ }
864
+ return {
865
+ cohesion: Math.round((internalEdgeCount / totalEdgesFromZone) * 100) / 100,
866
+ coupling: Math.round(((totalEdgesFromZone - internalEdgeCount) / totalEdgesFromZone) * 100) / 100,
867
+ };
868
+ }
869
+ // ── Helper: compute entry points ─────────────────────────────────────────────
870
+ /** Find files imported from outside the given member set. */
871
+ function computeEntryPoints(memberSet, imports) {
872
+ const entryPoints = [];
873
+ for (const edge of imports.edges) {
874
+ if (memberSet.has(edge.to) && !memberSet.has(edge.from)) {
875
+ if (!entryPoints.includes(edge.to)) {
876
+ entryPoints.push(edge.to);
877
+ }
878
+ }
879
+ }
880
+ return entryPoints;
881
+ }
882
+ // ── Helper: build zones from communities ─────────────────────────────────────
883
+ /**
884
+ * Convert Louvain community assignments into Zone objects with metrics.
885
+ * Computes entry points, cohesion/coupling, and recursive subdivision.
886
+ *
887
+ * Cohesion/coupling are computed from `metricsGraph` (import edges only),
888
+ * not from the clustering `graph` which includes proximity edges. This
889
+ * prevents isolated files grouped by directory proximity from receiving
890
+ * artificially perfect cohesion scores.
891
+ *
892
+ * When `parentId` is provided (subdivision), zone IDs are derived relative
893
+ * to the parent and prefixed with `parentId/`. The `depth` parameter is
894
+ * threaded to `subdivideZone` for recursion limiting.
895
+ */
896
+ function buildZonesFromCommunities(community, graph, metricsGraph, imports, inventory, testFiles, parentId, depth = 0, maxMergeSize) {
897
+ const communityMembers = new Map();
898
+ for (const [node, comm] of community) {
899
+ let list = communityMembers.get(comm);
900
+ if (!list) {
901
+ list = [];
902
+ communityMembers.set(comm, list);
903
+ }
904
+ list.push(node);
905
+ }
906
+ const usedIds = new Set();
907
+ const zones = [];
908
+ const filenameBasedZoneIds = new Set();
909
+ const sortedCommunities = [...communityMembers.entries()]
910
+ .map(([comm, members]) => [comm, members.sort()])
911
+ .sort(([, a], [, b]) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
912
+ for (const [, members] of sortedCommunities) {
913
+ let id = deriveZoneId(members, parentId);
914
+ if (usedIds.has(id)) {
915
+ const disambiguated = disambiguateZoneId(id, members, parentId);
916
+ if (disambiguated !== id && !usedIds.has(disambiguated)) {
917
+ id = disambiguated;
918
+ }
919
+ else {
920
+ // Try filename-based derivation before merging or adding numeric suffix
921
+ const filenameId = deriveZoneIdFromFilenames(members);
922
+ if (filenameId && !usedIds.has(filenameId)) {
923
+ id = filenameId;
924
+ filenameBasedZoneIds.add(parentId ? `${parentId}/${id}` : id);
925
+ }
926
+ else {
927
+ // Merge into existing zone instead of creating a numbered duplicate,
928
+ // but only if the combined size doesn't exceed the zone size cap
929
+ const targetId = parentId ? `${parentId}/${id}` : id;
930
+ const existing = zones.find(z => z.id === targetId);
931
+ if (existing && (!maxMergeSize || existing.files.length + members.length <= maxMergeSize)) {
932
+ existing.files.push(...members);
933
+ existing.files.sort();
934
+ existing.description = describeZone(existing.files, inventory);
935
+ const mergedSet = new Set(existing.files);
936
+ existing.entryPoints = computeEntryPoints(mergedSet, imports);
937
+ const metrics = computeZoneMetrics(existing.files, metricsGraph, testFiles);
938
+ existing.cohesion = metrics.cohesion;
939
+ existing.coupling = metrics.coupling;
940
+ // Re-subdivide with merged files
941
+ existing.subZones = undefined;
942
+ const subZones = subdivideZone(existing, imports, inventory, testFiles, depth);
943
+ if (subZones.length > 0) {
944
+ existing.subZones = subZones;
945
+ }
946
+ continue; // Skip creating a new zone
947
+ }
948
+ // Fallback: numeric suffix when merge would exceed size cap
949
+ let suffix = 2;
950
+ while (usedIds.has(`${id}-${suffix}`))
951
+ suffix++;
952
+ id = `${id}-${suffix}`;
953
+ }
954
+ }
955
+ }
956
+ usedIds.add(id);
957
+ // Prefix with parent zone ID for subdivision
958
+ if (parentId) {
959
+ id = `${parentId}/${id}`;
960
+ }
961
+ const memberSet = new Set(members);
962
+ const entryPoints = computeEntryPoints(memberSet, imports);
963
+ const { cohesion, coupling } = computeZoneMetrics(members, metricsGraph, testFiles);
964
+ const zone = {
965
+ id,
966
+ name: deriveZoneName(id),
967
+ description: describeZone(members, inventory),
968
+ files: members,
969
+ entryPoints,
970
+ cohesion,
971
+ coupling,
972
+ ...(depth > 0 ? { depth } : {}),
973
+ };
974
+ const subZones = subdivideZone(zone, imports, inventory, testFiles, depth);
975
+ if (subZones.length > 0) {
976
+ zone.subZones = subZones;
977
+ }
978
+ zones.push(zone);
979
+ }
980
+ return { zones, filenameBasedZoneIds };
981
+ }
982
+ // ── Helper: compute content hashes ───────────────────────────────────────────
983
+ /** Compute per-zone and global content hashes for stale-finding detection. */
984
+ function computeContentHashes(zones, inventory) {
985
+ const fileHashes = new Map();
986
+ for (const f of inventory.files) {
987
+ fileHashes.set(f.path, f.hash);
988
+ }
989
+ const zoneContentHashes = {};
990
+ for (const zone of zones) {
991
+ zoneContentHashes[zone.id] = computeZoneContentHash(zone, fileHashes);
992
+ }
993
+ const globalContentHash = computeGlobalContentHash(zoneContentHashes);
994
+ return { zoneContentHashes, globalContentHash };
995
+ }
996
+ /**
997
+ * Remap content hash keys from pre-enrichment zone IDs to post-enrichment IDs.
998
+ *
999
+ * Enrichment (AI or fast-mode preservation) may rename zone IDs. This function
1000
+ * builds a mapping by matching zones positionally (same index = same zone) and
1001
+ * returns a new hash record keyed by the final zone IDs.
1002
+ *
1003
+ * If no IDs changed, the original record is returned as-is for efficiency.
1004
+ */
1005
+ function remapContentHashKeys(originalHashes, preEnrichmentZones, postEnrichmentZones) {
1006
+ // Build old→new ID mapping. Zones are matched by array position since
1007
+ // enrichment preserves zone order and count.
1008
+ const idMap = new Map();
1009
+ let anyChanged = false;
1010
+ const limit = Math.min(preEnrichmentZones.length, postEnrichmentZones.length);
1011
+ for (let i = 0; i < limit; i++) {
1012
+ const oldId = preEnrichmentZones[i].id;
1013
+ const newId = postEnrichmentZones[i].id;
1014
+ if (oldId !== newId) {
1015
+ anyChanged = true;
1016
+ }
1017
+ idMap.set(oldId, newId);
1018
+ }
1019
+ if (!anyChanged)
1020
+ return originalHashes;
1021
+ const remapped = {};
1022
+ for (const [key, hash] of Object.entries(originalHashes)) {
1023
+ const newKey = idMap.get(key) ?? key;
1024
+ remapped[newKey] = hash;
1025
+ }
1026
+ return remapped;
1027
+ }
1028
+ /**
1029
+ * Run AI enrichment (per-zone or batch) or preserve previous zone names
1030
+ * when running in fast mode with unchanged structure.
1031
+ */
1032
+ async function applyEnrichment(expandedZones, imports, inventory, validPrevious, enrich, perZone, fileArchetypes, currentContentHashes, hints) {
1033
+ let finalZones = expandedZones;
1034
+ let aiZoneInsights = new Map();
1035
+ let aiGlobalInsights = [];
1036
+ let aiFindings = [];
1037
+ let enrichmentPass = 0;
1038
+ let metaUpdatedFindings = null;
1039
+ let enrichTokenUsage;
1040
+ if (enrich) {
1041
+ // Build pre-enrichment crossings for prompt context
1042
+ const preFileToZone = new Map();
1043
+ for (const z of expandedZones) {
1044
+ for (const f of z.files)
1045
+ preFileToZone.set(f, z.id);
1046
+ }
1047
+ const preCrossings = [];
1048
+ for (const edge of imports.edges) {
1049
+ const fz = preFileToZone.get(edge.from);
1050
+ const tz = preFileToZone.get(edge.to);
1051
+ if (fz && tz && fz !== tz) {
1052
+ preCrossings.push({
1053
+ from: edge.from,
1054
+ to: edge.to,
1055
+ fromZone: fz,
1056
+ toZone: tz,
1057
+ });
1058
+ }
1059
+ }
1060
+ if (perZone) {
1061
+ const result = await enrichZonesPerZone(expandedZones, preCrossings, inventory, imports, validPrevious, fileArchetypes, hints);
1062
+ finalZones = result.zones;
1063
+ aiZoneInsights = result.newZoneInsights;
1064
+ aiGlobalInsights = result.newGlobalInsights;
1065
+ aiFindings = result.newFindings;
1066
+ enrichmentPass = result.pass;
1067
+ enrichTokenUsage = result.tokenUsage;
1068
+ }
1069
+ else {
1070
+ const result = await enrichZonesWithAI(expandedZones, preCrossings, inventory, imports, validPrevious, fileArchetypes, currentContentHashes, hints);
1071
+ finalZones = result.zones;
1072
+ aiZoneInsights = result.newZoneInsights;
1073
+ aiGlobalInsights = result.newGlobalInsights;
1074
+ aiFindings = result.newFindings;
1075
+ enrichmentPass = result.pass;
1076
+ enrichTokenUsage = result.tokenUsage;
1077
+ if (result._updatedFindings) {
1078
+ metaUpdatedFindings = result._updatedFindings;
1079
+ }
1080
+ }
1081
+ }
1082
+ else if (validPrevious) {
1083
+ // --fast with unchanged structure: apply previous AI names, preserve insights
1084
+ const prevZones = validPrevious.zones;
1085
+ finalZones = expandedZones.map((zone) => {
1086
+ const prev = prevZones.find((p) => p.files.length > 0 && p.files.some((f) => zone.files.includes(f)));
1087
+ if (prev) {
1088
+ return { ...zone, id: prev.id, name: prev.name, description: prev.description };
1089
+ }
1090
+ return zone;
1091
+ });
1092
+ // Deduplicate IDs
1093
+ const fastUsedIds = new Set();
1094
+ for (const z of finalZones) {
1095
+ if (fastUsedIds.has(z.id)) {
1096
+ let suffix = 2;
1097
+ while (fastUsedIds.has(`${z.id}-${suffix}`))
1098
+ suffix++;
1099
+ z.id = `${z.id}-${suffix}`;
1100
+ }
1101
+ fastUsedIds.add(z.id);
1102
+ }
1103
+ enrichmentPass = validPrevious.enrichmentPass ?? 0;
1104
+ }
1105
+ return {
1106
+ finalZones,
1107
+ aiZoneInsights,
1108
+ aiGlobalInsights,
1109
+ aiFindings,
1110
+ enrichmentPass,
1111
+ metaUpdatedFindings,
1112
+ enrichTokenUsage,
1113
+ };
1114
+ }
1115
+ // ── Helper: build crossings ──────────────────────────────────────────────────
1116
+ /** Build zone crossings from import edges and promoted sub-analysis crossings. */
1117
+ function buildCrossings(allZones, imports, promotedCrossings) {
1118
+ const fileToZone = new Map();
1119
+ for (const zone of allZones) {
1120
+ for (const file of zone.files)
1121
+ fileToZone.set(file, zone.id);
1122
+ }
1123
+ const crossings = [...promotedCrossings];
1124
+ for (const edge of imports.edges) {
1125
+ const fromZone = fileToZone.get(edge.from);
1126
+ const toZone = fileToZone.get(edge.to);
1127
+ if (fromZone && toZone && fromZone !== toZone) {
1128
+ crossings.push({ from: edge.from, to: edge.to, fromZone, toZone });
1129
+ }
1130
+ }
1131
+ return crossings;
1132
+ }
1133
+ // ── Helper: merge insights ───────────────────────────────────────────────────
1134
+ /**
1135
+ * Merge zone insights: structural (fresh, deterministic) + accumulated AI
1136
+ * from previous runs + new AI from current enrichment.
1137
+ */
1138
+ function mergeZoneInsights(finalZones, structural, aiZoneInsights, validPrevious) {
1139
+ for (const zone of finalZones) {
1140
+ const structuralForZone = structural.zoneInsights.get(zone.id) ?? [];
1141
+ const newAiForZone = aiZoneInsights.get(zone.id) ?? [];
1142
+ let prevAi = [];
1143
+ if (validPrevious) {
1144
+ const prevZone = validPrevious.zones.find((p) => p.id === zone.id ||
1145
+ (p.files.length > 0 && p.files.some((f) => zone.files.includes(f))));
1146
+ if (prevZone?.insights) {
1147
+ let startIdx = 0;
1148
+ for (let i = 0; i < structuralForZone.length && i < prevZone.insights.length; i++) {
1149
+ if (prevZone.insights[i] === structuralForZone[i]) {
1150
+ startIdx = i + 1;
1151
+ }
1152
+ else {
1153
+ break;
1154
+ }
1155
+ }
1156
+ prevAi = prevZone.insights.slice(startIdx);
1157
+ }
1158
+ }
1159
+ const allInsights = [...structuralForZone, ...prevAi, ...newAiForZone];
1160
+ zone.insights = allInsights.length > 0 ? allInsights : undefined;
1161
+ }
1162
+ }
1163
+ /**
1164
+ * Merge global insights: structural + previous AI + new AI.
1165
+ * Returns the combined global insights array.
1166
+ */
1167
+ function mergeGlobalInsights(structural, aiGlobalInsights, validPrevious) {
1168
+ let prevGlobalAi = [];
1169
+ if (validPrevious?.insights) {
1170
+ const sg = structural.globalInsights;
1171
+ let startIdx = 0;
1172
+ for (let i = 0; i < sg.length && i < validPrevious.insights.length; i++) {
1173
+ if (validPrevious.insights[i] === sg[i]) {
1174
+ startIdx = i + 1;
1175
+ }
1176
+ else {
1177
+ break;
1178
+ }
1179
+ }
1180
+ prevGlobalAi = validPrevious.insights.slice(startIdx);
1181
+ }
1182
+ return [
1183
+ ...structural.globalInsights,
1184
+ ...prevGlobalAi,
1185
+ ...aiGlobalInsights,
1186
+ ];
1187
+ }
1188
+ // ── Helper: assemble findings ────────────────────────────────────────────────
1189
+ /**
1190
+ * Build the complete findings array: structural (pass 0) + preserved previous
1191
+ * AI findings + new AI findings. Handles stale-content detection and deduplication.
1192
+ */
1193
+ function assembleFindings(finalZones, structural, aiFindings, metaUpdatedFindings, validPrevious, previousZones, zoneContentHashes, globalContentHash) {
1194
+ const structuralFindings = [];
1195
+ for (const zone of finalZones) {
1196
+ const zoneStructural = structural.zoneInsights.get(zone.id) ?? [];
1197
+ for (const text of zoneStructural) {
1198
+ structuralFindings.push({
1199
+ type: "observation",
1200
+ pass: 0,
1201
+ scope: zone.id,
1202
+ text,
1203
+ severity: text.includes("Low cohesion") || text.includes("too broad")
1204
+ ? "warning"
1205
+ : text.includes("High coupling")
1206
+ ? "warning"
1207
+ : text.includes("entry points")
1208
+ ? "warning"
1209
+ : text.includes("Generic zone name")
1210
+ ? "warning"
1211
+ : "info",
1212
+ });
1213
+ }
1214
+ }
1215
+ for (const text of structural.globalInsights) {
1216
+ structuralFindings.push({
1217
+ type: "observation",
1218
+ pass: 0,
1219
+ scope: "global",
1220
+ text,
1221
+ severity: text.includes("circular") || text.includes("Bidirectional")
1222
+ ? "warning"
1223
+ : "info",
1224
+ });
1225
+ }
1226
+ // Check content staleness for preserved previous findings
1227
+ const prevContentHashes = previousZones?.zoneContentHashes;
1228
+ function isContentStale(finding) {
1229
+ if (!prevContentHashes)
1230
+ return false;
1231
+ if (finding.scope === "global") {
1232
+ const prevGlobal = computeGlobalContentHash(prevContentHashes);
1233
+ return prevGlobal !== globalContentHash;
1234
+ }
1235
+ const prevHash = prevContentHashes[finding.scope];
1236
+ const currHash = zoneContentHashes[finding.scope];
1237
+ if (!prevHash || !currHash)
1238
+ return true;
1239
+ return prevHash !== currHash;
1240
+ }
1241
+ const prevAiFindings = [];
1242
+ if (metaUpdatedFindings) {
1243
+ for (const f of metaUpdatedFindings) {
1244
+ if (f.pass > 0 && !isContentStale(f)) {
1245
+ prevAiFindings.push(f);
1246
+ }
1247
+ }
1248
+ }
1249
+ else if (validPrevious?.findings) {
1250
+ for (const f of validPrevious.findings) {
1251
+ if (f.pass > 0 && !isContentStale(f)) {
1252
+ prevAiFindings.push(f);
1253
+ }
1254
+ }
1255
+ }
1256
+ return enforceSeverityRules(deduplicateFindings([...structuralFindings, ...structural.findings, ...prevAiFindings, ...aiFindings]));
1257
+ }
1258
+ // ── Helper: back-populate insights ───────────────────────────────────────────
1259
+ /**
1260
+ * Ensure every finding's text appears in the appropriate insights array.
1261
+ * AI enrichment may produce structured findings without corresponding legacy
1262
+ * insight strings — this keeps backward compatibility for legacy consumers.
1263
+ */
1264
+ function backPopulateInsights(finalZones, allFindings, allGlobalInsights) {
1265
+ const zoneInsightSets = new Map();
1266
+ for (const zone of finalZones) {
1267
+ zoneInsightSets.set(zone.id, new Set(zone.insights ?? []));
1268
+ }
1269
+ const globalInsightSet = new Set(allGlobalInsights);
1270
+ for (const f of allFindings) {
1271
+ if (f.scope === "global") {
1272
+ if (!globalInsightSet.has(f.text)) {
1273
+ allGlobalInsights.push(f.text);
1274
+ globalInsightSet.add(f.text);
1275
+ }
1276
+ }
1277
+ else {
1278
+ const existing = zoneInsightSets.get(f.scope);
1279
+ if (existing && !existing.has(f.text)) {
1280
+ const zone = finalZones.find((z) => z.id === f.scope);
1281
+ if (zone) {
1282
+ if (!zone.insights)
1283
+ zone.insights = [];
1284
+ zone.insights.push(f.text);
1285
+ existing.add(f.text);
1286
+ }
1287
+ }
1288
+ }
1289
+ }
1290
+ }
1291
+ // ── Zone detection pipeline ──────────────────────────────────────────────────
1292
+ /**
1293
+ * Maximum percentage of project files a single zone should contain.
1294
+ * Zones exceeding this threshold are split via internal Louvain subdivision.
1295
+ * Default: 15% — prevents over-aggregation where one zone dominates the codebase.
1296
+ */
1297
+ export const DEFAULT_MAX_ZONE_PERCENT = 15;
1298
+ /**
1299
+ * Run the full zone detection pipeline: graph construction, Louvain community
1300
+ * detection, community merging/splitting, zone construction with subdivision,
1301
+ * proximity assignment, and crossing computation.
1302
+ *
1303
+ * This is the shared pipeline used by both root-level analysis and (future)
1304
+ * recursive zone subdivision.
1305
+ */
1306
+ export function runZonePipeline(options) {
1307
+ const { edges, inventory, imports, scopeFiles, maxZones = 30, maxZonePercent = DEFAULT_MAX_ZONE_PERCENT, parentId, depth = 0, testFiles = new Set(), zonePins, } = options;
1308
+ // ── Build undirected graph ──
1309
+ const graph = buildUndirectedGraph(edges);
1310
+ // Snapshot the import-only graph for metrics computation. Proximity edges
1311
+ // exist to help Louvain cluster disconnected files but they are NOT
1312
+ // evidence of architectural cohesion — inflating cohesion for zones
1313
+ // whose files share a directory but never import each other.
1314
+ const importOnlyGraph = new Map();
1315
+ for (const [node, neighbors] of graph) {
1316
+ importOnlyGraph.set(node, new Map(neighbors));
1317
+ }
1318
+ // ── Add directory proximity edges ──
1319
+ // Only for files not already in the import graph, and only those sharing
1320
+ // a directory with at least one other non-import file. Files with imports
1321
+ // are clustered purely by import structure; files without imports get
1322
+ // proximity-based grouping among themselves.
1323
+ const importGraphNodes = new Set(graph.keys());
1324
+ const nonImportFiles = scopeFiles.filter(f => !importGraphNodes.has(f));
1325
+ const nonImportDirCounts = new Map();
1326
+ for (const f of nonImportFiles) {
1327
+ const lastSlash = f.lastIndexOf("/");
1328
+ const dir = lastSlash === -1 ? "." : f.slice(0, lastSlash);
1329
+ nonImportDirCounts.set(dir, (nonImportDirCounts.get(dir) ?? 0) + 1);
1330
+ }
1331
+ const clusterableNonImportFiles = nonImportFiles.filter(f => {
1332
+ const lastSlash = f.lastIndexOf("/");
1333
+ const dir = lastSlash === -1 ? "." : f.slice(0, lastSlash);
1334
+ return (nonImportDirCounts.get(dir) ?? 0) >= 2;
1335
+ });
1336
+ addDirectoryProximityEdges(graph, clusterableNonImportFiles);
1337
+ // ── Scale maxZones by file count ──
1338
+ // Small packages shouldn't fragment into many zones. Scale from 3 (≤36 files)
1339
+ // up to the configured cap (default 30 at 360+ files).
1340
+ // Also ensure we allow enough zones for the size policy to work —
1341
+ // if maxZonePercent limits zone size, we need at least ceil(n/maxSize) zones.
1342
+ const graphNodeCount = graph.size;
1343
+ const scaledByCount = Math.max(3, Math.floor(graphNodeCount / 12));
1344
+ const maxPct = Math.max(1, Math.min(100, maxZonePercent));
1345
+ const maxZoneSize = Math.max(3, Math.ceil(graphNodeCount * maxPct / 100));
1346
+ const minForSizePolicy = maxPct < 100 ? Math.ceil(graphNodeCount / maxZoneSize) : 0;
1347
+ const scaledMaxZones = Math.min(maxZones, Math.max(scaledByCount, minForSizePolicy));
1348
+ // ── Louvain community detection ──
1349
+ let community = louvainPhase1(graph);
1350
+ community = mergeBidirectionalCoupling(community, graph);
1351
+ community = mergeSmallCommunities(community, graph);
1352
+ community = mergeSatelliteCommunities(community, graph);
1353
+ community = capZoneCount(community, graph, scaledMaxZones);
1354
+ // ── Split oversized communities ──
1355
+ community = splitLargeCommunities(community, graph, maxZoneSize);
1356
+ mergeSameIdCommunities(community, maxPct < 100 ? maxZoneSize : undefined);
1357
+ community = capZoneCount(community, graph, scaledMaxZones); // re-cap after split
1358
+ // ── Build zones from communities ──
1359
+ const { zones, filenameBasedZoneIds } = buildZonesFromCommunities(community, graph, importOnlyGraph, imports, inventory, testFiles, parentId, depth, maxPct < 100 ? maxZoneSize : undefined);
1360
+ // ── Assign unzoned files by directory proximity ──
1361
+ const zonedFiles = new Set();
1362
+ for (const zone of zones) {
1363
+ for (const f of zone.files)
1364
+ zonedFiles.add(f);
1365
+ }
1366
+ const initialUnzoned = scopeFiles.filter(f => !zonedFiles.has(f));
1367
+ const { zones: expandedZones, remaining: unzoned } = assignByProximity(zones, initialUnzoned, maxPct < 100 ? maxZoneSize : undefined);
1368
+ // ── Apply zone pins ──
1369
+ const pinnedZones = zonePins && Object.keys(zonePins).length > 0
1370
+ ? applyZonePins(expandedZones, zonePins)
1371
+ : expandedZones;
1372
+ // ── Build crossings ──
1373
+ const crossings = buildCrossings(pinnedZones, imports, []);
1374
+ return { zones: pinnedZones, crossings, unzoned, filenameBasedZoneIds };
1375
+ }
1376
+ // ── Non-importable file extensions ────────────────────────────────────────────
1377
+ /**
1378
+ * File extensions that cannot form import edges in any JS/TS module system.
1379
+ * Including these in zone detection produces noise zones (e.g. logo, web-landing)
1380
+ * with false-positive 'at-risk' labels and distorted cohesion scores of 0.
1381
+ */
1382
+ const NON_IMPORTABLE_EXTENSIONS = new Set([
1383
+ // Binary image assets
1384
+ ".png", ".jpg", ".jpeg", ".gif", ".ico", ".webp", ".avif", ".bmp", ".tiff",
1385
+ // Vector and font assets
1386
+ ".svg", ".woff", ".woff2", ".ttf", ".otf", ".eot",
1387
+ // Media assets
1388
+ ".mp3", ".mp4", ".wav", ".ogg", ".webm", ".pdf",
1389
+ // Markup and style (not importable as modules)
1390
+ ".html", ".htm", ".css", ".scss", ".less", ".sass",
1391
+ // Data and documentation
1392
+ ".md", ".mdx", ".json", ".yaml", ".yml", ".toml",
1393
+ // Lock files
1394
+ ".lock",
1395
+ ]);
1396
+ // ── Helper: prepare scope and edges ──────────────────────────────────────────
1397
+ /** Filter sub-analyzed files from edges/inventory and build the test file set. */
1398
+ function prepareScopeAndEdges(inventory, imports, subAnalyses) {
1399
+ const subAnalyzedPrefixes = getSubAnalyzedPrefixes(subAnalyses);
1400
+ const filteredEdges = subAnalyzedPrefixes.length > 0
1401
+ ? imports.edges.filter((e) => !isSubAnalyzedFile(e.from, subAnalyzedPrefixes) &&
1402
+ !isSubAnalyzedFile(e.to, subAnalyzedPrefixes))
1403
+ : imports.edges;
1404
+ const scopeFiles = inventory.files
1405
+ .filter(f => !isSubAnalyzedFile(f.path, subAnalyzedPrefixes))
1406
+ .filter(f => !NON_IMPORTABLE_EXTENSIONS.has(extname(f.path).toLowerCase()))
1407
+ .map(f => f.path);
1408
+ const testFiles = new Set();
1409
+ for (const f of inventory.files) {
1410
+ if (f.role === "test")
1411
+ testFiles.add(f.path);
1412
+ }
1413
+ return { filteredEdges, scopeFiles, testFiles, subAnalyzedPrefixes };
1414
+ }
1415
+ // ── Helper: promote sub-analyses ─────────────────────────────────────────────
1416
+ /**
1417
+ * Promote zones and crossings from sub-analyses into the root zone list.
1418
+ * Also resolves workspace member npm imports (e.g. `@n-dx/llm-client`) into
1419
+ * zone crossings so foundation-tier coupling is visible in the monorepo graph.
1420
+ */
1421
+ function promoteSubAnalyses(subAnalyses, pinnedFinalZones) {
1422
+ const promotedZones = [];
1423
+ const promotedCrossings = [];
1424
+ for (const sub of subAnalyses) {
1425
+ promotedZones.push(...promoteZones(sub));
1426
+ promotedCrossings.push(...promoteCrossings(sub));
1427
+ }
1428
+ const allZones = [...pinnedFinalZones, ...promotedZones];
1429
+ if (subAnalyses.length > 0) {
1430
+ const packageMap = buildPackageMap(subAnalyses);
1431
+ const crossRepoCrossings = computeCrossRepoCrossings(subAnalyses, allZones, packageMap);
1432
+ promotedCrossings.push(...crossRepoCrossings);
1433
+ }
1434
+ return { allZones, promotedCrossings };
1435
+ }
1436
+ // ── Helper: move recommendations ─────────────────────────────────────────────
1437
+ /** Detect pin divergence and import-neighbor move recommendations. */
1438
+ function computeMoveFindings(pinnedFinalZones, crossings, edges, zonePins) {
1439
+ const rootCrossings = crossings.filter((c) => !c.fromZone.includes(":") && !c.toZone.includes(":"));
1440
+ const moveCtx = {
1441
+ zones: pinnedFinalZones,
1442
+ crossings: rootCrossings,
1443
+ edges,
1444
+ zonePins,
1445
+ };
1446
+ return [
1447
+ ...detectPinDivergence(moveCtx),
1448
+ ...detectImportNeighborMoves(moveCtx),
1449
+ ];
1450
+ }
1451
+ // ── Helper: build final result ───────────────────────────────────────────────
1452
+ /** Assemble the final AnalyzeZonesResult with sorted zones data. */
1453
+ function buildAnalyzeZonesResult(opts) {
1454
+ const { allZones, crossings, unzoned, allGlobalInsights, allFindings, enrichmentPass, structureHash, remappedContentHashes, previousZones, structureChanged, enrichTokenUsage, } = opts;
1455
+ const prevMetaCount = previousZones?.metaEvaluationCount ?? 0;
1456
+ const metaEvaluationCount = enrichmentPass >= 5
1457
+ ? prevMetaCount + 1
1458
+ : prevMetaCount > 0 ? prevMetaCount : undefined;
1459
+ const displayPass = enrichmentPass > 4 ? 4 : enrichmentPass;
1460
+ const lastReset = (structureChanged && previousZones?.enrichmentPass)
1461
+ ? { from: previousZones.enrichmentPass, to: 1 }
1462
+ : undefined;
1463
+ return {
1464
+ zones: sortZonesData({
1465
+ zones: allZones,
1466
+ crossings,
1467
+ unzoned,
1468
+ insights: allGlobalInsights.length > 0 ? allGlobalInsights : undefined,
1469
+ findings: allFindings.length > 0 ? allFindings : undefined,
1470
+ enrichmentPass: enrichmentPass > 0 ? displayPass : undefined,
1471
+ ...(metaEvaluationCount ? { metaEvaluationCount } : {}),
1472
+ structureHash,
1473
+ zoneContentHashes: remappedContentHashes,
1474
+ ...(lastReset ? { lastReset } : {}),
1475
+ }),
1476
+ tokenUsage: enrichTokenUsage,
1477
+ structureChanged,
1478
+ };
1479
+ }
1480
+ // ── Main entry point ────────────────────────────────────────────────────────
1481
+ export async function analyzeZones(inventory, imports, options) {
1482
+ const enrich = options?.enrich ?? true;
1483
+ const perZone = options?.perZone ?? false;
1484
+ const previousZones = options?.previousZones;
1485
+ const subAnalyses = options?.subAnalyses ?? [];
1486
+ // ── Prepare scope ──
1487
+ const { filteredEdges, scopeFiles, testFiles, subAnalyzedPrefixes } = prepareScopeAndEdges(inventory, imports, subAnalyses);
1488
+ // ── Run zone detection pipeline ──
1489
+ const pipeline = runZonePipeline({
1490
+ edges: filteredEdges,
1491
+ inventory,
1492
+ imports,
1493
+ scopeFiles,
1494
+ maxZonePercent: options?.maxZonePercent,
1495
+ testFiles,
1496
+ zonePins: options?.zonePins,
1497
+ });
1498
+ const { zones: expandedZones, unzoned, filenameBasedZoneIds } = pipeline;
1499
+ // ── Structure hash & change detection ──
1500
+ const structureHash = computeStructureHash(expandedZones);
1501
+ const structureChanged = previousZones?.structureHash !== structureHash;
1502
+ const validPrevious = structureChanged ? undefined : previousZones;
1503
+ if (structureChanged && previousZones?.enrichmentPass && options?.onReset) {
1504
+ options.onReset(previousZones.enrichmentPass, 1);
1505
+ }
1506
+ // ── Content hashes for stale-finding detection ──
1507
+ const { zoneContentHashes, globalContentHash } = computeContentHashes(expandedZones, inventory);
1508
+ // ── AI enrichment or preserve previous ──
1509
+ const enrichResult = await applyEnrichment(expandedZones, imports, inventory, validPrevious, enrich, perZone, options?.fileArchetypes, zoneContentHashes, options?.hints);
1510
+ const { finalZones, aiZoneInsights, aiGlobalInsights, aiFindings, enrichmentPass, metaUpdatedFindings, enrichTokenUsage } = enrichResult;
1511
+ // ── Remap content hashes to post-enrichment zone IDs ──
1512
+ const remappedContentHashes = remapContentHashKeys(zoneContentHashes, expandedZones, finalZones);
1513
+ // ── Apply zone pins (post-enrichment) ──
1514
+ const pinnedFinalZones = options?.zonePins && Object.keys(options.zonePins).length > 0
1515
+ ? applyZonePins(finalZones, options.zonePins)
1516
+ : finalZones;
1517
+ // ── Promote sub-analyses and build crossings ──
1518
+ const { allZones, promotedCrossings } = promoteSubAnalyses(subAnalyses, pinnedFinalZones);
1519
+ const crossings = buildCrossings(allZones, imports, promotedCrossings);
1520
+ // ── Generate structural insights + move recommendations ──
1521
+ const rootFileCount = inventory.files.filter((f) => !isSubAnalyzedFile(f.path, subAnalyzedPrefixes)).length;
1522
+ const structural = generateStructuralInsights(pinnedFinalZones, crossings.filter((c) => !c.fromZone.includes(":") && !c.toZone.includes(":")), imports, rootFileCount, undefined, filenameBasedZoneIds);
1523
+ structural.findings.push(...computeMoveFindings(pinnedFinalZones, crossings, imports.edges, options?.zonePins ?? {}));
1524
+ // ── Merge insights ──
1525
+ mergeZoneInsights(pinnedFinalZones, structural, aiZoneInsights, validPrevious);
1526
+ const allGlobalInsights = mergeGlobalInsights(structural, aiGlobalInsights, validPrevious);
1527
+ // ── Assemble findings ──
1528
+ const allFindings = assembleFindings(pinnedFinalZones, structural, aiFindings, metaUpdatedFindings, validPrevious, previousZones, remappedContentHashes, globalContentHash);
1529
+ // ── Back-populate findings into insights for backward compatibility ──
1530
+ backPopulateInsights(pinnedFinalZones, allFindings, allGlobalInsights);
1531
+ // ── Build result ──
1532
+ return buildAnalyzeZonesResult({
1533
+ allZones, crossings, unzoned, allGlobalInsights, allFindings,
1534
+ enrichmentPass, structureHash, remappedContentHashes,
1535
+ previousZones, structureChanged, enrichTokenUsage,
1536
+ });
1537
+ }
1538
+ //# sourceMappingURL=zones.js.map