@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,2016 @@
1
+ /**
2
+ * Hench API routes — agent run history, workflow configuration, and templates.
3
+ *
4
+ * All endpoints are under /api/hench/.
5
+ *
6
+ * GET /api/hench/runs — list runs with summary (newest first, ?limit=N)
7
+ * GET /api/hench/runs/:id — full run detail with transcript
8
+ * GET /api/hench/runs/health — staleness health check for running runs
9
+ * POST /api/hench/runs/:id/mark-stuck — mark a stuck run as failed
10
+ * GET /api/hench/task-usage — incremental per-task token usage aggregation
11
+ * GET /api/hench/audit — audit info for active tasks (PIDs, resource usage)
12
+ * GET /api/hench/metrics — concurrent execution metrics and resource utilization
13
+ * GET /api/hench/metrics/snapshots — time-series execution metrics snapshots
14
+ * GET /api/hench/memory — system memory, per-process memory, and resource health
15
+ * GET /api/hench/memory/history — per-process memory history (all tracked processes)
16
+ * GET /api/hench/memory/history/:taskId — memory history for a specific task
17
+ * GET /api/hench/memory/leaks — leak detection summary for all active processes
18
+ * GET /api/hench/concurrency — concurrent execution count, limits, and queue status
19
+ * POST /api/hench/execute/:taskId/terminate — terminate a running task
20
+ * GET /api/hench/config — current workflow configuration with field metadata
21
+ * PUT /api/hench/config — update workflow configuration (partial or full)
22
+ * GET /api/hench/templates — list all workflow templates (built-in + user)
23
+ * GET /api/hench/templates/:id — get template details
24
+ * POST /api/hench/templates — create/update a user-defined template
25
+ * POST /api/hench/templates/:id/apply — apply a template to current config
26
+ * DELETE /api/hench/templates/:id — delete a user-defined template
27
+ * POST /api/hench/execute — trigger Hench run for a specific task
28
+ * GET /api/hench/execute/status — get all active execution statuses
29
+ * GET /api/hench/execute/status/:taskId — get specific task execution status
30
+ * GET /api/hench/throttle — current throttle state (paused, concurrency override, etc.)
31
+ * PUT /api/hench/throttle — adjust concurrency limit override
32
+ * POST /api/hench/throttle/pause — pause new task executions
33
+ * POST /api/hench/throttle/resume — resume new task executions
34
+ * POST /api/hench/throttle/emergency-stop — terminate all running executions immediately
35
+ */
36
+ import { readFileSync, readdirSync, writeFileSync, existsSync } from "node:fs";
37
+ import { writeFile } from "node:fs/promises";
38
+ import { join } from "node:path";
39
+ import { execFileSync } from "node:child_process";
40
+ import { totalmem, freemem, loadavg, cpus } from "node:os";
41
+ import { spawnManaged, killWithFallback } from "@n-dx/llm-client";
42
+ import { jsonResponse, errorResponse, readBody } from "./types.js";
43
+ import { clearStatusCache } from "./routes-status.js";
44
+ import { IncrementalTaskUsageAggregator } from "./task-usage.js";
45
+ import { collectAllIds } from "./rex-gateway.js";
46
+ import { loadPRDSync } from "./prd-io.js";
47
+ import { ProcessMemoryTracker } from "./process-memory-tracker.js";
48
+ import { ConcurrentExecutionMetrics } from "./concurrent-execution-metrics.js";
49
+ const HENCH_PREFIX = "/api/hench/";
50
+ /**
51
+ * Per-project aggregator singletons. Keyed by runsDir so each project
52
+ * gets its own incremental cache that persists across requests.
53
+ */
54
+ const aggregatorCache = new Map();
55
+ export function getAggregator(runsDir) {
56
+ let aggregator = aggregatorCache.get(runsDir);
57
+ if (!aggregator) {
58
+ aggregator = new IncrementalTaskUsageAggregator(runsDir);
59
+ aggregatorCache.set(runsDir, aggregator);
60
+ }
61
+ return aggregator;
62
+ }
63
+ /**
64
+ * Module-level process memory tracker singleton.
65
+ *
66
+ * Records per-process RSS samples during each memory broadcast cycle
67
+ * and provides historical data + leak detection via the API.
68
+ */
69
+ const processMemoryTracker = new ProcessMemoryTracker();
70
+ /**
71
+ * Module-level concurrent execution metrics singleton.
72
+ *
73
+ * Records time-series snapshots of concurrent process counts, total memory
74
+ * utilization, and per-task resource metrics during each monitoring cycle.
75
+ * Provides aggregate patterns (peak, average) for dashboard consumption.
76
+ */
77
+ const executionMetrics = new ConcurrentExecutionMetrics();
78
+ /** Known config field metadata — mirrors the CLI config module. */
79
+ const CONFIG_FIELD_META = [
80
+ { path: "provider", label: "Provider", description: "Claude provider: 'cli' (Claude Code) or 'api' (direct API)", type: "enum", enumValues: ["cli", "api"], category: "execution" },
81
+ { path: "model", label: "Model", description: "Claude model to use (e.g. sonnet, opus, haiku)", type: "string", category: "execution" },
82
+ { path: "maxTurns", label: "Max Turns", description: "Maximum conversation turns per run", type: "number", category: "execution" },
83
+ { path: "maxTokens", label: "Max Tokens per Request", description: "Maximum tokens per API request", type: "number", category: "execution" },
84
+ { path: "tokenBudget", label: "Token Budget", description: "Total token budget per run (input+output). 0 = unlimited", type: "number", category: "execution" },
85
+ { path: "loopPauseMs", label: "Loop Pause (ms)", description: "Pause between loop/iteration runs in milliseconds", type: "number", category: "execution" },
86
+ { path: "maxFailedAttempts", label: "Max Failed Attempts", description: "Consecutive failures before a task is considered stuck", type: "number", category: "task-selection" },
87
+ { path: "rexDir", label: "Rex Directory", description: "Path to the .rex directory for task data", type: "string", category: "task-selection" },
88
+ { path: "retry.maxRetries", label: "Max Retries", description: "Number of retry attempts for transient API errors", type: "number", category: "retry" },
89
+ { path: "retry.baseDelayMs", label: "Base Retry Delay (ms)", description: "Initial delay before first retry (doubles each attempt)", type: "number", category: "retry" },
90
+ { path: "retry.maxDelayMs", label: "Max Retry Delay (ms)", description: "Maximum delay between retries (caps exponential backoff)", type: "number", category: "retry" },
91
+ { path: "guard.blockedPaths", label: "Blocked Paths", description: "Glob patterns for paths the agent cannot modify", type: "array", category: "guard" },
92
+ { path: "guard.allowedCommands", label: "Allowed Commands", description: "Shell commands the agent is permitted to execute", type: "array", category: "guard" },
93
+ { path: "guard.commandTimeout", label: "Command Timeout (ms)", description: "Maximum time for a single command execution", type: "number", category: "guard" },
94
+ { path: "guard.maxFileSize", label: "Max File Size (bytes)", description: "Maximum file size the agent can write", type: "number", category: "guard" },
95
+ { path: "apiKeyEnv", label: "API Key Env Var", description: "Environment variable name for Anthropic API key", type: "string", category: "general" },
96
+ ];
97
+ /** Default config values for detecting non-default settings. */
98
+ const DEFAULT_CONFIG = {
99
+ provider: "cli",
100
+ model: "sonnet",
101
+ maxTurns: 50,
102
+ maxTokens: 8192,
103
+ tokenBudget: 0,
104
+ loopPauseMs: 2000,
105
+ maxFailedAttempts: 3,
106
+ rexDir: ".rex",
107
+ "retry.maxRetries": 3,
108
+ "retry.baseDelayMs": 2000,
109
+ "retry.maxDelayMs": 30000,
110
+ "guard.commandTimeout": 30000,
111
+ "guard.maxFileSize": 1048576,
112
+ apiKeyEnv: "ANTHROPIC_API_KEY",
113
+ };
114
+ /** Impact descriptions keyed by field path. */
115
+ function getImpact(path, value) {
116
+ switch (path) {
117
+ case "provider":
118
+ return value === "cli"
119
+ ? "Agent will use Claude Code CLI (tool-use mode, filesystem access)"
120
+ : "Agent will call Anthropic API directly (requires API key)";
121
+ case "model":
122
+ return `Agent will use model "${value}" for task execution`;
123
+ case "maxTurns": {
124
+ const n = Number(value);
125
+ return `Agent will stop after ${n} turns (${n <= 10 ? "short" : n <= 30 ? "medium" : "long"} runs)`;
126
+ }
127
+ case "maxTokens":
128
+ return `Each API response limited to ${Number(value).toLocaleString()} tokens`;
129
+ case "tokenBudget":
130
+ return Number(value) === 0
131
+ ? "No token limit per run (unlimited)"
132
+ : `Run will stop after ${Number(value).toLocaleString()} total tokens`;
133
+ case "loopPauseMs":
134
+ return `${Number(value) / 1000}s pause between consecutive task runs`;
135
+ case "maxFailedAttempts":
136
+ return `Tasks will be skipped as stuck after ${value} consecutive failures`;
137
+ case "retry.maxRetries":
138
+ return `Transient errors will be retried up to ${value} times`;
139
+ case "retry.baseDelayMs":
140
+ return `First retry after ${Number(value) / 1000}s, then exponential backoff`;
141
+ case "retry.maxDelayMs":
142
+ return `Retry delay capped at ${Number(value) / 1000}s`;
143
+ case "guard.commandTimeout":
144
+ return `Commands will be killed after ${Number(value) / 1000}s`;
145
+ case "guard.maxFileSize":
146
+ return `Agent limited to writing files under ${(Number(value) / 1024 / 1024).toFixed(1)}MB`;
147
+ case "guard.blockedPaths":
148
+ return `Agent blocked from ${value.length} path patterns`;
149
+ case "guard.allowedCommands":
150
+ return `Agent can execute: ${value.join(", ")}`;
151
+ default:
152
+ return "";
153
+ }
154
+ }
155
+ /** Read the hench config.json directly from disk. */
156
+ function loadHenchConfig(projectDir) {
157
+ try {
158
+ const raw = readFileSync(join(projectDir, ".hench", "config.json"), "utf-8");
159
+ return JSON.parse(raw);
160
+ }
161
+ catch {
162
+ return null;
163
+ }
164
+ }
165
+ /** Get a nested value from an object using dot-path notation. */
166
+ function getNestedValue(obj, path) {
167
+ const parts = path.split(".");
168
+ let current = obj;
169
+ for (const part of parts) {
170
+ if (current === null || current === undefined || typeof current !== "object") {
171
+ return undefined;
172
+ }
173
+ current = current[part];
174
+ }
175
+ return current;
176
+ }
177
+ /** Set a nested value in an object using dot-path notation. */
178
+ function setNestedValue(obj, path, value) {
179
+ const parts = path.split(".");
180
+ let current = obj;
181
+ for (let i = 0; i < parts.length - 1; i++) {
182
+ if (!(parts[i] in current) || typeof current[parts[i]] !== "object" || current[parts[i]] === null) {
183
+ current[parts[i]] = {};
184
+ }
185
+ current = current[parts[i]];
186
+ }
187
+ current[parts[parts.length - 1]] = value;
188
+ }
189
+ /** Basic type validation for config values. */
190
+ function validateFieldValue(field, value) {
191
+ switch (field.type) {
192
+ case "number":
193
+ if (typeof value !== "number" || isNaN(value))
194
+ return `${field.label} must be a number`;
195
+ if (value < 0)
196
+ return `${field.label} must be non-negative`;
197
+ return null;
198
+ case "boolean":
199
+ if (typeof value !== "boolean")
200
+ return `${field.label} must be a boolean`;
201
+ return null;
202
+ case "enum":
203
+ if (field.enumValues && !field.enumValues.includes(String(value)))
204
+ return `${field.label} must be one of: ${field.enumValues.join(", ")}`;
205
+ return null;
206
+ case "array":
207
+ if (!Array.isArray(value))
208
+ return `${field.label} must be an array`;
209
+ return null;
210
+ case "string":
211
+ if (typeof value !== "string" || value.length === 0)
212
+ return `${field.label} must be a non-empty string`;
213
+ return null;
214
+ default:
215
+ return null;
216
+ }
217
+ }
218
+ /** Read a single run file, returning the full parsed JSON or null on error. */
219
+ function loadRunFile(runsDir, id) {
220
+ try {
221
+ const raw = readFileSync(join(runsDir, `${id}.json`), "utf-8");
222
+ return JSON.parse(raw);
223
+ }
224
+ catch {
225
+ return null;
226
+ }
227
+ }
228
+ /** Strip heavy fields to produce a lightweight summary for list views. */
229
+ function toRunSummary(run) {
230
+ const structured = run.structuredSummary;
231
+ return {
232
+ id: run.id,
233
+ taskId: run.taskId,
234
+ taskTitle: run.taskTitle,
235
+ startedAt: run.startedAt,
236
+ finishedAt: run.finishedAt,
237
+ lastActivityAt: run.lastActivityAt,
238
+ status: run.status,
239
+ turns: run.turns,
240
+ summary: run.summary,
241
+ error: run.error,
242
+ model: run.model,
243
+ tokenUsage: (run.tokenUsage ?? { input: 0, output: 0 }),
244
+ structuredSummary: structured
245
+ ? { counts: structured.counts }
246
+ : undefined,
247
+ };
248
+ }
249
+ /** Routes: task-usage, audit */
250
+ function routeUsage(rc) {
251
+ // GET /api/hench/task-usage — incremental per-task token usage aggregation
252
+ if (rc.path === "task-usage" && rc.method === "GET") {
253
+ const aggregator = getAggregator(rc.runsDir);
254
+ return aggregator.getTaskUsage().then((taskUsage) => {
255
+ const validIds = loadValidTaskIds(rc.ctx);
256
+ if (validIds) {
257
+ aggregator.pruneStaleEntries(validIds);
258
+ const pruned = {};
259
+ for (const [id, acc] of Object.entries(taskUsage)) {
260
+ if (validIds.has(id))
261
+ pruned[id] = acc;
262
+ }
263
+ jsonResponse(rc.res, 200, { taskUsage: pruned });
264
+ }
265
+ else {
266
+ jsonResponse(rc.res, 200, { taskUsage });
267
+ }
268
+ return true;
269
+ });
270
+ }
271
+ // GET /api/hench/audit — task execution audit info
272
+ if (rc.path === "audit" && rc.method === "GET") {
273
+ return handleAudit(rc.res, rc.runsDir);
274
+ }
275
+ return null;
276
+ }
277
+ /** Routes: metrics, metrics/snapshots */
278
+ function routeMetrics(rc) {
279
+ if (rc.path === "metrics/snapshots" && rc.method === "GET") {
280
+ return handleMetricsSnapshots(rc.res);
281
+ }
282
+ if (rc.path === "metrics" && rc.method === "GET") {
283
+ return handleMetrics(rc.res);
284
+ }
285
+ return null;
286
+ }
287
+ /** Routes: memory, memory/history, memory/history/:taskId, memory/leaks */
288
+ function routeMemory(rc) {
289
+ if (!rc.path.startsWith("memory"))
290
+ return null;
291
+ if (rc.path === "memory" && rc.method === "GET") {
292
+ return handleMemory(rc.res);
293
+ }
294
+ const historyMatch = rc.path.match(/^memory\/history\/([^/?]+)$/);
295
+ if (historyMatch && rc.method === "GET") {
296
+ return handleMemoryHistoryByTask(historyMatch[1], rc.res);
297
+ }
298
+ if (rc.path === "memory/history" && rc.method === "GET") {
299
+ return handleMemoryHistory(rc.res);
300
+ }
301
+ if (rc.path === "memory/leaks" && rc.method === "GET") {
302
+ return handleMemoryLeaks(rc.res);
303
+ }
304
+ return null;
305
+ }
306
+ /** Routes: throttle (GET/PUT), throttle/pause, throttle/resume, throttle/emergency-stop */
307
+ function routeThrottle(rc) {
308
+ if (!rc.path.startsWith("throttle"))
309
+ return null;
310
+ if (rc.path === "throttle" && rc.method === "GET") {
311
+ return handleThrottleGet(rc.res, rc.ctx);
312
+ }
313
+ if (rc.path === "throttle" && rc.method === "PUT") {
314
+ return handleThrottleUpdate(rc.req, rc.res, rc.ctx, rc.broadcast);
315
+ }
316
+ if (rc.path === "throttle/pause" && rc.method === "POST") {
317
+ return handleThrottlePause(rc.res, rc.broadcast, rc.ctx);
318
+ }
319
+ if (rc.path === "throttle/resume" && rc.method === "POST") {
320
+ return handleThrottleResume(rc.res, rc.broadcast, rc.ctx);
321
+ }
322
+ if (rc.path === "throttle/emergency-stop" && rc.method === "POST") {
323
+ return handleEmergencyStop(rc.req, rc.res, rc.broadcast, rc.ctx);
324
+ }
325
+ return null;
326
+ }
327
+ /** Routes: execute (POST), execute/status, execute/status/:taskId, execute/:taskId/terminate */
328
+ function routeExecute(rc) {
329
+ if (!rc.path.startsWith("execute"))
330
+ return null;
331
+ const terminateMatch = rc.path.match(/^execute\/([^/?]+)\/terminate$/);
332
+ if (terminateMatch && rc.method === "POST") {
333
+ return handleTerminate(terminateMatch[1], rc.res, rc.runsDir, rc.broadcast);
334
+ }
335
+ if (rc.path === "execute" && rc.method === "POST") {
336
+ return handleExecute(rc.req, rc.res, rc.ctx, rc.broadcast);
337
+ }
338
+ if (rc.path === "execute/status" && rc.method === "GET") {
339
+ return handleExecuteStatus(rc.res);
340
+ }
341
+ const statusMatch = rc.path.match(/^execute\/status\/([^/?]+)$/);
342
+ if (statusMatch && rc.method === "GET") {
343
+ return handleExecuteStatusForTask(statusMatch[1], rc.res);
344
+ }
345
+ return null;
346
+ }
347
+ /** Routes: runs, runs/:id, runs/health, runs/:id/mark-stuck */
348
+ function routeRuns(rc) {
349
+ if (!rc.path.startsWith("runs"))
350
+ return null;
351
+ if (rc.path === "runs/health" && rc.method === "GET") {
352
+ return handleRunsHealth(rc.res, rc.runsDir);
353
+ }
354
+ const markStuckMatch = rc.path.match(/^runs\/([^/?]+)\/mark-stuck$/);
355
+ if (markStuckMatch && rc.method === "POST") {
356
+ return handleMarkStuck(markStuckMatch[1], rc.res, rc.runsDir);
357
+ }
358
+ // GET /api/hench/runs — list runs with summary (?limit=N&offset=N)
359
+ if (rc.path === "runs" && rc.method === "GET") {
360
+ let files;
361
+ try {
362
+ files = readdirSync(rc.runsDir);
363
+ }
364
+ catch {
365
+ jsonResponse(rc.res, 200, { runs: [], total: 0 });
366
+ return true;
367
+ }
368
+ const jsonFiles = files.filter((f) => f.endsWith(".json"));
369
+ const total = jsonFiles.length;
370
+ let limit = 0;
371
+ let offset = 0;
372
+ let filterTaskId = null;
373
+ if (rc.qIdx !== -1) {
374
+ const params = new URLSearchParams(rc.fullPath.slice(rc.qIdx));
375
+ const limitStr = params.get("limit");
376
+ const offsetStr = params.get("offset");
377
+ const taskIdStr = params.get("taskId");
378
+ if (limitStr)
379
+ limit = Math.max(0, parseInt(limitStr, 10) || 0);
380
+ if (offsetStr)
381
+ offset = Math.max(0, parseInt(offsetStr, 10) || 0);
382
+ if (taskIdStr)
383
+ filterTaskId = taskIdStr;
384
+ }
385
+ jsonFiles.sort((a, b) => b.localeCompare(a));
386
+ const filesToLoad = (!filterTaskId && (limit > 0 || offset > 0))
387
+ ? jsonFiles.slice(offset, limit > 0 ? offset + limit : undefined)
388
+ : jsonFiles;
389
+ const summaries = [];
390
+ for (const file of filesToLoad) {
391
+ const id = file.replace(/\.json$/, "");
392
+ const run = loadRunFile(rc.runsDir, id);
393
+ if (run && run.id && run.startedAt) {
394
+ // When filtering by taskId, skip non-matching runs before building summary
395
+ if (filterTaskId && run.taskId !== filterTaskId)
396
+ continue;
397
+ summaries.push(toRunSummary(run));
398
+ }
399
+ }
400
+ summaries.sort((a, b) => b.startedAt.localeCompare(a.startedAt));
401
+ // Apply limit/offset after taskId filtering (when both are present)
402
+ const paginatedSummaries = filterTaskId && (limit > 0 || offset > 0)
403
+ ? summaries.slice(offset, limit > 0 ? offset + limit : undefined)
404
+ : summaries;
405
+ jsonResponse(rc.res, 200, { runs: paginatedSummaries, total: filterTaskId ? summaries.length : total });
406
+ return true;
407
+ }
408
+ // GET /api/hench/runs/:id — full run detail
409
+ const runsMatch = rc.path.match(/^runs\/([^/?]+)$/);
410
+ if (runsMatch && rc.method === "GET") {
411
+ const runId = runsMatch[1];
412
+ const run = loadRunFile(rc.runsDir, runId);
413
+ if (!run) {
414
+ errorResponse(rc.res, 404, `Run "${runId}" not found`);
415
+ return true;
416
+ }
417
+ jsonResponse(rc.res, 200, run);
418
+ return true;
419
+ }
420
+ return null;
421
+ }
422
+ /** Routes: config (GET/PUT) */
423
+ function routeConfig(rc) {
424
+ if (!rc.path.startsWith("config"))
425
+ return null;
426
+ if (rc.path === "config" && rc.method === "GET") {
427
+ const config = loadHenchConfig(rc.ctx.projectDir);
428
+ if (!config) {
429
+ errorResponse(rc.res, 404, "Hench configuration not found. Run 'hench init' first.");
430
+ return true;
431
+ }
432
+ const fields = CONFIG_FIELD_META.map((field) => {
433
+ const value = getNestedValue(config, field.path);
434
+ const defaultValue = DEFAULT_CONFIG[field.path];
435
+ const isDefault = JSON.stringify(value) === JSON.stringify(defaultValue);
436
+ return {
437
+ ...field,
438
+ value,
439
+ defaultValue,
440
+ isDefault,
441
+ impact: getImpact(field.path, value),
442
+ };
443
+ });
444
+ jsonResponse(rc.res, 200, { config, fields });
445
+ return true;
446
+ }
447
+ if (rc.path === "config" && rc.method === "PUT") {
448
+ return handleConfigUpdate(rc.req, rc.res, rc.ctx);
449
+ }
450
+ return null;
451
+ }
452
+ /** Routes: templates (GET/POST), templates/:id (GET/DELETE), templates/:id/apply */
453
+ function routeTemplates(rc) {
454
+ if (!rc.path.startsWith("templates"))
455
+ return null;
456
+ if (rc.path === "templates" && rc.method === "GET") {
457
+ return handleTemplateList(rc.res, rc.ctx);
458
+ }
459
+ if (rc.path === "templates" && rc.method === "POST") {
460
+ return handleTemplateCreate(rc.req, rc.res, rc.ctx);
461
+ }
462
+ const applyMatch = rc.path.match(/^templates\/([a-z][a-z0-9-]+)\/apply$/);
463
+ if (applyMatch && rc.method === "POST") {
464
+ return handleTemplateApply(applyMatch[1], rc.res, rc.ctx);
465
+ }
466
+ const idMatch = rc.path.match(/^templates\/([a-z][a-z0-9-]+)$/);
467
+ if (idMatch && rc.method === "GET") {
468
+ return handleTemplateGet(idMatch[1], rc.res, rc.ctx);
469
+ }
470
+ if (idMatch && rc.method === "DELETE") {
471
+ return handleTemplateDelete(idMatch[1], rc.res, rc.ctx);
472
+ }
473
+ return null;
474
+ }
475
+ /** Handle Hench API requests. Returns true if the request was handled. */
476
+ export function handleHenchRoute(req, res, ctx, broadcast) {
477
+ const url = req.url || "/";
478
+ if (!url.startsWith(HENCH_PREFIX))
479
+ return false;
480
+ const fullPath = url.slice(HENCH_PREFIX.length);
481
+ const qIdx = fullPath.indexOf("?");
482
+ const path = qIdx === -1 ? fullPath : fullPath.slice(0, qIdx);
483
+ const rc = {
484
+ path,
485
+ fullPath,
486
+ qIdx,
487
+ method: req.method || "GET",
488
+ req,
489
+ res,
490
+ ctx,
491
+ runsDir: join(ctx.projectDir, ".hench", "runs"),
492
+ broadcast,
493
+ };
494
+ // Dispatch to sub-routers — first non-null result wins.
495
+ return routeUsage(rc)
496
+ ?? routeMetrics(rc)
497
+ ?? routeMemory(rc)
498
+ ?? routeThrottle(rc)
499
+ ?? routeExecute(rc)
500
+ ?? routeRuns(rc)
501
+ ?? routeConfig(rc)
502
+ ?? routeTemplates(rc)
503
+ ?? routeConcurrency(rc)
504
+ ?? false;
505
+ }
506
+ /** Routes: concurrency */
507
+ function routeConcurrency(rc) {
508
+ if (rc.path === "concurrency" && rc.method === "GET") {
509
+ return handleConcurrency(rc.res, rc.ctx);
510
+ }
511
+ return null;
512
+ }
513
+ /** Handle PUT /api/hench/config — validate and apply config changes. */
514
+ async function handleConfigUpdate(req, res, ctx) {
515
+ const configPath = join(ctx.projectDir, ".hench", "config.json");
516
+ // Load current config
517
+ const current = loadHenchConfig(ctx.projectDir);
518
+ if (!current) {
519
+ errorResponse(res, 404, "Hench configuration not found. Run 'hench init' first.");
520
+ return true;
521
+ }
522
+ // Parse request body
523
+ let body;
524
+ try {
525
+ const raw = await readBody(req);
526
+ body = JSON.parse(raw);
527
+ }
528
+ catch {
529
+ errorResponse(res, 400, "Invalid JSON in request body");
530
+ return true;
531
+ }
532
+ const changes = body.changes;
533
+ if (!changes || typeof changes !== "object") {
534
+ errorResponse(res, 400, "Request body must include a 'changes' object with field path/value pairs");
535
+ return true;
536
+ }
537
+ // Validate and apply each change
538
+ const errors = [];
539
+ const applied = [];
540
+ for (const [fieldPath, newValue] of Object.entries(changes)) {
541
+ const field = CONFIG_FIELD_META.find((f) => f.path === fieldPath);
542
+ if (!field) {
543
+ errors.push(`Unknown field: ${fieldPath}`);
544
+ continue;
545
+ }
546
+ const validationError = validateFieldValue(field, newValue);
547
+ if (validationError) {
548
+ errors.push(validationError);
549
+ continue;
550
+ }
551
+ const oldValue = getNestedValue(current, fieldPath);
552
+ setNestedValue(current, fieldPath, newValue);
553
+ applied.push({
554
+ path: fieldPath,
555
+ oldValue,
556
+ newValue,
557
+ impact: getImpact(fieldPath, newValue),
558
+ });
559
+ }
560
+ if (errors.length > 0) {
561
+ errorResponse(res, 400, `Validation errors: ${errors.join("; ")}`);
562
+ return true;
563
+ }
564
+ // Write back
565
+ try {
566
+ writeFileSync(configPath, JSON.stringify(current, null, 2) + "\n", "utf-8");
567
+ }
568
+ catch (err) {
569
+ errorResponse(res, 500, `Failed to write config: ${err instanceof Error ? err.message : String(err)}`);
570
+ return true;
571
+ }
572
+ jsonResponse(res, 200, { applied, config: current });
573
+ return true;
574
+ }
575
+ /** Built-in templates — matches hench/src/schema/templates.ts. */
576
+ const BUILT_IN_TEMPLATES = [
577
+ {
578
+ id: "quick-iteration",
579
+ name: "Quick Iteration",
580
+ description: "Short, fast runs for rapid prototyping and small fixes",
581
+ useCases: ["Bug fixes and small patches", "Quick refactors with clear scope", "Exploratory changes with fast feedback"],
582
+ tags: ["fast", "lightweight", "prototyping"],
583
+ config: { maxTurns: 15, tokenBudget: 50000, loopPauseMs: 500, retry: { maxRetries: 2, baseDelayMs: 1000, maxDelayMs: 10000 } },
584
+ builtIn: true,
585
+ },
586
+ {
587
+ id: "thorough-execution",
588
+ name: "Thorough Execution",
589
+ description: "Extended runs with generous limits for complex multi-file tasks",
590
+ useCases: ["New feature implementation across multiple files", "Large refactoring efforts", "Tasks requiring extensive test writing"],
591
+ tags: ["thorough", "complex", "multi-file"],
592
+ config: { maxTurns: 80, maxTokens: 16384, tokenBudget: 200000, loopPauseMs: 2000, retry: { maxRetries: 5, baseDelayMs: 2000, maxDelayMs: 60000 } },
593
+ builtIn: true,
594
+ },
595
+ {
596
+ id: "budget-conscious",
597
+ name: "Budget Conscious",
598
+ description: "Optimized for minimal token usage while maintaining quality",
599
+ useCases: ["Cost-sensitive environments", "High-volume task processing", "Routine maintenance tasks"],
600
+ tags: ["budget", "cost-effective", "efficient"],
601
+ config: { maxTurns: 20, maxTokens: 4096, tokenBudget: 30000, loopPauseMs: 3000, retry: { maxRetries: 2, baseDelayMs: 3000, maxDelayMs: 15000 } },
602
+ builtIn: true,
603
+ },
604
+ {
605
+ id: "strict-safety",
606
+ name: "Strict Safety",
607
+ description: "Maximum guard rails for sensitive codebases and production-adjacent work",
608
+ useCases: ["Production infrastructure changes", "Security-sensitive code modifications", "Regulated environments requiring audit trails"],
609
+ tags: ["safety", "security", "production"],
610
+ config: { maxTurns: 30, maxFailedAttempts: 2, guard: { blockedPaths: [".hench/**", ".rex/**", ".git/**", "node_modules/**", ".env*", "*.pem", "*.key", "**/secrets/**", "**/credentials/**"], allowedCommands: ["npm", "npx", "node", "git", "tsc", "vitest"], commandTimeout: 15000, maxFileSize: 524288 } },
611
+ builtIn: true,
612
+ },
613
+ {
614
+ id: "api-direct",
615
+ name: "API Direct",
616
+ description: "Use Anthropic API directly instead of Claude Code CLI for headless environments",
617
+ useCases: ["CI/CD pipeline integration", "Headless server environments", "Custom API key management"],
618
+ tags: ["api", "headless", "ci-cd"],
619
+ config: { provider: "api", maxTurns: 40, tokenBudget: 150000, retry: { maxRetries: 4, baseDelayMs: 3000, maxDelayMs: 30000 } },
620
+ builtIn: true,
621
+ },
622
+ ];
623
+ const TEMPLATES_FILE = "templates.json";
624
+ /** Load user-defined templates from .hench/templates.json. */
625
+ function loadUserTemplates(projectDir) {
626
+ const filePath = join(projectDir, ".hench", TEMPLATES_FILE);
627
+ try {
628
+ if (!existsSync(filePath))
629
+ return [];
630
+ const raw = readFileSync(filePath, "utf-8");
631
+ const parsed = JSON.parse(raw);
632
+ if (!Array.isArray(parsed))
633
+ return [];
634
+ return parsed;
635
+ }
636
+ catch {
637
+ return [];
638
+ }
639
+ }
640
+ /** Get all templates (built-in + user). */
641
+ function getAllTemplates(projectDir) {
642
+ const builtInIds = new Set(BUILT_IN_TEMPLATES.map((t) => t.id));
643
+ const userTemplates = loadUserTemplates(projectDir).filter((t) => !builtInIds.has(t.id));
644
+ return [...BUILT_IN_TEMPLATES, ...userTemplates];
645
+ }
646
+ /** Find a template by ID (built-in first, then user). */
647
+ function findTemplate(projectDir, id) {
648
+ const builtIn = BUILT_IN_TEMPLATES.find((t) => t.id === id);
649
+ if (builtIn)
650
+ return builtIn;
651
+ const user = loadUserTemplates(projectDir);
652
+ return user.find((t) => t.id === id) ?? null;
653
+ }
654
+ /** Apply a template config overlay to a config object. */
655
+ function mergeTemplateConfig(config, overlay) {
656
+ const result = JSON.parse(JSON.stringify(config));
657
+ for (const [key, value] of Object.entries(overlay)) {
658
+ if (key === "guard" || key === "retry") {
659
+ // Deep merge nested objects
660
+ const existing = (result[key] ?? {});
661
+ result[key] = { ...existing, ...value };
662
+ }
663
+ else {
664
+ result[key] = value;
665
+ }
666
+ }
667
+ return result;
668
+ }
669
+ // ── Template route handlers ──────────────────────────────────────────
670
+ /** GET /api/hench/templates */
671
+ function handleTemplateList(res, ctx) {
672
+ const templates = getAllTemplates(ctx.projectDir);
673
+ jsonResponse(res, 200, { templates });
674
+ return true;
675
+ }
676
+ /** GET /api/hench/templates/:id */
677
+ function handleTemplateGet(id, res, ctx) {
678
+ const template = findTemplate(ctx.projectDir, id);
679
+ if (!template) {
680
+ errorResponse(res, 404, `Template "${id}" not found`);
681
+ return true;
682
+ }
683
+ jsonResponse(res, 200, template);
684
+ return true;
685
+ }
686
+ /** POST /api/hench/templates — create/update user template. */
687
+ async function handleTemplateCreate(req, res, ctx) {
688
+ let body;
689
+ try {
690
+ const raw = await readBody(req);
691
+ body = JSON.parse(raw);
692
+ }
693
+ catch {
694
+ errorResponse(res, 400, "Invalid JSON in request body");
695
+ return true;
696
+ }
697
+ const id = body.id;
698
+ if (!id || typeof id !== "string" || !/^[a-z][a-z0-9-]{1,49}$/.test(id)) {
699
+ errorResponse(res, 400, "Template ID is required and must be lowercase with hyphens (2-50 chars)");
700
+ return true;
701
+ }
702
+ // Reject overwriting built-in templates
703
+ if (BUILT_IN_TEMPLATES.some((t) => t.id === id)) {
704
+ errorResponse(res, 400, `Cannot overwrite built-in template "${id}"`);
705
+ return true;
706
+ }
707
+ const template = {
708
+ id,
709
+ name: body.name || id.replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()),
710
+ description: body.description || "User-defined workflow template",
711
+ useCases: Array.isArray(body.useCases) ? body.useCases : [],
712
+ tags: Array.isArray(body.tags) ? body.tags : [],
713
+ config: body.config || {},
714
+ builtIn: false,
715
+ createdAt: new Date().toISOString(),
716
+ };
717
+ // Load, update, and write back
718
+ const filePath = join(ctx.projectDir, ".hench", TEMPLATES_FILE);
719
+ const existing = loadUserTemplates(ctx.projectDir);
720
+ const idx = existing.findIndex((t) => t.id === id);
721
+ if (idx >= 0) {
722
+ existing[idx] = template;
723
+ }
724
+ else {
725
+ existing.push(template);
726
+ }
727
+ try {
728
+ await writeFile(filePath, JSON.stringify(existing, null, 2) + "\n", "utf-8");
729
+ }
730
+ catch (err) {
731
+ errorResponse(res, 500, `Failed to save template: ${err instanceof Error ? err.message : String(err)}`);
732
+ return true;
733
+ }
734
+ jsonResponse(res, 201, template);
735
+ return true;
736
+ }
737
+ /** POST /api/hench/templates/:id/apply — apply template to current config. */
738
+ function handleTemplateApply(id, res, ctx) {
739
+ const template = findTemplate(ctx.projectDir, id);
740
+ if (!template) {
741
+ errorResponse(res, 404, `Template "${id}" not found`);
742
+ return true;
743
+ }
744
+ const config = loadHenchConfig(ctx.projectDir);
745
+ if (!config) {
746
+ errorResponse(res, 404, "Hench configuration not found. Run 'hench init' first.");
747
+ return true;
748
+ }
749
+ const updated = mergeTemplateConfig(config, template.config);
750
+ const configPath = join(ctx.projectDir, ".hench", "config.json");
751
+ try {
752
+ writeFileSync(configPath, JSON.stringify(updated, null, 2) + "\n", "utf-8");
753
+ }
754
+ catch (err) {
755
+ errorResponse(res, 500, `Failed to write config: ${err instanceof Error ? err.message : String(err)}`);
756
+ return true;
757
+ }
758
+ jsonResponse(res, 200, {
759
+ applied: template.id,
760
+ templateName: template.name,
761
+ config: updated,
762
+ });
763
+ return true;
764
+ }
765
+ /** DELETE /api/hench/templates/:id — delete user template. */
766
+ async function handleTemplateDelete(id, res, ctx) {
767
+ if (BUILT_IN_TEMPLATES.some((t) => t.id === id)) {
768
+ errorResponse(res, 400, `Cannot delete built-in template "${id}"`);
769
+ return true;
770
+ }
771
+ const filePath = join(ctx.projectDir, ".hench", TEMPLATES_FILE);
772
+ const existing = loadUserTemplates(ctx.projectDir);
773
+ const filtered = existing.filter((t) => t.id !== id);
774
+ if (filtered.length === existing.length) {
775
+ errorResponse(res, 404, `Template "${id}" not found`);
776
+ return true;
777
+ }
778
+ try {
779
+ await writeFile(filePath, JSON.stringify(filtered, null, 2) + "\n", "utf-8");
780
+ }
781
+ catch (err) {
782
+ errorResponse(res, 500, `Failed to delete template: ${err instanceof Error ? err.message : String(err)}`);
783
+ return true;
784
+ }
785
+ jsonResponse(res, 200, { deleted: id });
786
+ return true;
787
+ }
788
+ // ── Task execution ───────────────────────────────────────────────────
789
+ /** Actionable statuses — only tasks in these states can be triggered. */
790
+ const ACTIONABLE_STATUSES = new Set(["pending", "blocked"]);
791
+ /** Track active task executions to prevent concurrent runs on the same task. */
792
+ const activeExecutions = new Map();
793
+ /** Load and parse prd.json from disk. */
794
+ function loadPRDForExecute(ctx) {
795
+ return loadPRDSync(ctx.rexDir);
796
+ }
797
+ /**
798
+ * Load the set of all task IDs currently in the PRD.
799
+ * Returns null if the PRD cannot be read (e.g. not initialized yet),
800
+ * allowing callers to degrade gracefully.
801
+ */
802
+ function loadValidTaskIds(ctx) {
803
+ const doc = loadPRDSync(ctx.rexDir);
804
+ if (!doc || !Array.isArray(doc.items))
805
+ return null;
806
+ return collectAllIds(doc.items);
807
+ }
808
+ /** Recursively find a PRD item by ID. */
809
+ function findPRDItem(items, id) {
810
+ for (const item of items) {
811
+ if (item.id === id)
812
+ return item;
813
+ const children = item.children;
814
+ if (children) {
815
+ const found = findPRDItem(children, id);
816
+ if (found)
817
+ return found;
818
+ }
819
+ }
820
+ return null;
821
+ }
822
+ /** Broadcast an execution state update. */
823
+ function broadcastExecState(broadcast, state) {
824
+ if (!broadcast)
825
+ return;
826
+ broadcast({
827
+ type: "hench:task-execution-progress",
828
+ state: { ...state },
829
+ timestamp: new Date().toISOString(),
830
+ });
831
+ }
832
+ /** POST /api/hench/execute — trigger Hench run for a specific task. */
833
+ async function handleExecute(req, res, ctx, broadcast) {
834
+ // Parse request body
835
+ let body;
836
+ try {
837
+ const raw = await readBody(req);
838
+ body = JSON.parse(raw);
839
+ }
840
+ catch {
841
+ errorResponse(res, 400, "Invalid JSON in request body");
842
+ return true;
843
+ }
844
+ const taskId = body.taskId;
845
+ if (!taskId || typeof taskId !== "string") {
846
+ errorResponse(res, 400, "taskId is required");
847
+ return true;
848
+ }
849
+ // Validate task exists in PRD
850
+ const doc = loadPRDForExecute(ctx);
851
+ if (!doc) {
852
+ errorResponse(res, 404, "PRD not found. Run 'rex init' first.");
853
+ return true;
854
+ }
855
+ const items = doc.items;
856
+ if (!items) {
857
+ errorResponse(res, 404, "PRD has no items");
858
+ return true;
859
+ }
860
+ const task = findPRDItem(items, taskId);
861
+ if (!task) {
862
+ errorResponse(res, 404, `Task "${taskId}" not found in PRD`);
863
+ return true;
864
+ }
865
+ // Validate task is actionable
866
+ const status = task.status;
867
+ if (!ACTIONABLE_STATUSES.has(status)) {
868
+ errorResponse(res, 409, `Task is in "${status}" status and cannot be executed. Only pending or blocked tasks can be triggered.`);
869
+ return true;
870
+ }
871
+ // Check if new executions are paused via throttle controls
872
+ if (throttleState.paused) {
873
+ errorResponse(res, 503, "New executions are paused. Resume via the throttle controls before starting new tasks.");
874
+ return true;
875
+ }
876
+ // Check for concurrent execution
877
+ if (activeExecutions.has(taskId)) {
878
+ const active = activeExecutions.get(taskId);
879
+ jsonResponse(res, 409, {
880
+ error: "Task is already being executed",
881
+ runId: active.runId,
882
+ taskId,
883
+ });
884
+ return true;
885
+ }
886
+ // Resolve hench binary
887
+ const henchBin = join(ctx.projectDir, "node_modules", ".bin", "hench");
888
+ const henchFallback = join(ctx.projectDir, "packages", "hench", "dist", "cli", "index.js");
889
+ const args = ["run", `--task=${taskId}`, "--auto", ctx.projectDir];
890
+ const binPath = existsSync(henchBin) ? henchBin : "node";
891
+ const binArgs = existsSync(henchBin) ? args : [henchFallback, ...args];
892
+ // Generate a run ID for tracking (hench will generate its own, but we
893
+ // need one to correlate the response before the process starts writing)
894
+ const runId = `exec-${Date.now().toString(36)}`;
895
+ const taskTitle = task.title;
896
+ // Build initial execution state
897
+ const execState = {
898
+ taskId,
899
+ taskTitle,
900
+ runId,
901
+ status: "starting",
902
+ startedAt: new Date().toISOString(),
903
+ };
904
+ // Spawn hench process
905
+ const handle = spawnManaged(binPath, binArgs, {
906
+ cwd: ctx.projectDir,
907
+ stdio: "pipe",
908
+ env: { ...process.env },
909
+ });
910
+ // Track active execution
911
+ activeExecutions.set(taskId, { runId, handle, state: execState });
912
+ // Register with execution metrics (uses PID when available, 0 until spawned)
913
+ executionMetrics.taskStarted(taskId, taskTitle, handle.pid ?? 0);
914
+ // Broadcast initial state
915
+ broadcastExecState(broadcast, execState);
916
+ // Transition to "running" after a short delay (hench takes a moment to initialize)
917
+ setTimeout(() => {
918
+ const entry = activeExecutions.get(taskId);
919
+ if (entry && entry.state.status === "starting") {
920
+ entry.state.status = "running";
921
+ broadcastExecState(broadcast, { ...entry.state });
922
+ }
923
+ }, 2000);
924
+ // Handle process completion
925
+ handle.done
926
+ .then((result) => {
927
+ const entry = activeExecutions.get(taskId);
928
+ if (entry) {
929
+ const isSuccess = result.exitCode === 0;
930
+ entry.state.status = isSuccess ? "completed" : "failed";
931
+ entry.state.finishedAt = new Date().toISOString();
932
+ entry.state.exitCode = result.exitCode;
933
+ if (!isSuccess && result.stderr) {
934
+ entry.state.error = result.stderr.slice(-200);
935
+ }
936
+ if (result.stdout) {
937
+ entry.state.lastOutput = result.stdout.slice(-200);
938
+ }
939
+ broadcastExecState(broadcast, { ...entry.state });
940
+ }
941
+ processMemoryTracker.markCompleted(taskId);
942
+ executionMetrics.taskCompleted(taskId);
943
+ activeExecutions.delete(taskId);
944
+ })
945
+ .catch((err) => {
946
+ const entry = activeExecutions.get(taskId);
947
+ if (entry) {
948
+ entry.state.status = "failed";
949
+ entry.state.finishedAt = new Date().toISOString();
950
+ entry.state.error = err instanceof Error ? err.message : String(err);
951
+ broadcastExecState(broadcast, { ...entry.state });
952
+ }
953
+ processMemoryTracker.markCompleted(taskId);
954
+ executionMetrics.taskCompleted(taskId);
955
+ activeExecutions.delete(taskId);
956
+ });
957
+ // Return immediately with tracking info
958
+ jsonResponse(res, 202, {
959
+ runId,
960
+ taskId,
961
+ taskTitle,
962
+ status: "started",
963
+ });
964
+ return true;
965
+ }
966
+ /** GET /api/hench/execute/status — return status of all active executions. */
967
+ function handleExecuteStatus(res) {
968
+ const executions = [];
969
+ for (const entry of activeExecutions.values()) {
970
+ executions.push({ ...entry.state });
971
+ }
972
+ jsonResponse(res, 200, { executions });
973
+ return true;
974
+ }
975
+ /** GET /api/hench/execute/status/:taskId — return status of a specific task execution. */
976
+ function handleExecuteStatusForTask(taskId, res) {
977
+ const entry = activeExecutions.get(taskId);
978
+ if (!entry) {
979
+ jsonResponse(res, 200, { execution: null });
980
+ return true;
981
+ }
982
+ jsonResponse(res, 200, { execution: { ...entry.state } });
983
+ return true;
984
+ }
985
+ // ── Health monitoring ─────────────────────────────────────────────────
986
+ /** Default staleness threshold: 5 minutes in milliseconds. */
987
+ const STALE_THRESHOLD_MS = 5 * 60 * 1000;
988
+ /**
989
+ * Heartbeat interval expected from the agent (matches hench heartbeat writer).
990
+ * Used to compute missedHeartbeats and heartbeatStatus.
991
+ */
992
+ const HEARTBEAT_INTERVAL_MS = 30_000;
993
+ /** Warning threshold: flag as "warning" after 2 missed heartbeats (60s). */
994
+ const HEARTBEAT_WARNING_MS = HEARTBEAT_INTERVAL_MS * 2;
995
+ /** Unresponsive threshold: flag as "unresponsive" after 4 missed heartbeats (120s). */
996
+ const HEARTBEAT_UNRESPONSIVE_MS = HEARTBEAT_INTERVAL_MS * 4;
997
+ /** Compute heartbeat health from time since last activity. */
998
+ function computeHeartbeatStatus(lastActivityMs, nowMs) {
999
+ if (lastActivityMs == null) {
1000
+ return { status: "unknown", missedHeartbeats: 0 };
1001
+ }
1002
+ const elapsed = nowMs - lastActivityMs;
1003
+ const missedHeartbeats = Math.max(0, Math.floor(elapsed / HEARTBEAT_INTERVAL_MS));
1004
+ let status;
1005
+ if (elapsed < HEARTBEAT_WARNING_MS) {
1006
+ status = "healthy";
1007
+ }
1008
+ else if (elapsed < HEARTBEAT_UNRESPONSIVE_MS) {
1009
+ status = "warning";
1010
+ }
1011
+ else {
1012
+ status = "unresponsive";
1013
+ }
1014
+ return { status, missedHeartbeats };
1015
+ }
1016
+ /** GET /api/hench/runs/health — detect stale "running" runs. */
1017
+ function handleRunsHealth(res, runsDir) {
1018
+ let files;
1019
+ try {
1020
+ files = readdirSync(runsDir);
1021
+ }
1022
+ catch {
1023
+ jsonResponse(res, 200, { activeRuns: 0, staleRuns: 0, runs: [] });
1024
+ return true;
1025
+ }
1026
+ const now = Date.now();
1027
+ const runningRuns = [];
1028
+ for (const file of files) {
1029
+ if (!file.endsWith(".json"))
1030
+ continue;
1031
+ const id = file.replace(/\.json$/, "");
1032
+ const run = loadRunFile(runsDir, id);
1033
+ if (!run || run.status !== "running")
1034
+ continue;
1035
+ const lastActivity = run.lastActivityAt;
1036
+ const lastActivityMs = lastActivity ? new Date(lastActivity).getTime() : null;
1037
+ const stale = lastActivityMs != null
1038
+ ? (now - lastActivityMs) > STALE_THRESHOLD_MS
1039
+ : true; // No lastActivityAt = legacy run, treat as stale if still "running"
1040
+ runningRuns.push({
1041
+ id: run.id,
1042
+ taskId: run.taskId,
1043
+ taskTitle: run.taskTitle,
1044
+ startedAt: run.startedAt,
1045
+ lastActivityAt: lastActivity,
1046
+ stale,
1047
+ staleSinceMs: lastActivityMs != null ? Math.max(0, now - lastActivityMs) : undefined,
1048
+ });
1049
+ }
1050
+ jsonResponse(res, 200, {
1051
+ activeRuns: runningRuns.length,
1052
+ staleRuns: runningRuns.filter((r) => r.stale).length,
1053
+ runs: runningRuns,
1054
+ });
1055
+ return true;
1056
+ }
1057
+ /** POST /api/hench/runs/:id/mark-stuck — mark a stuck run as failed. */
1058
+ function handleMarkStuck(runId, res, runsDir) {
1059
+ const runPath = join(runsDir, `${runId}.json`);
1060
+ const run = loadRunFile(runsDir, runId);
1061
+ if (!run) {
1062
+ errorResponse(res, 404, `Run "${runId}" not found`);
1063
+ return true;
1064
+ }
1065
+ if (run.status !== "running") {
1066
+ errorResponse(res, 409, `Run is "${run.status}", not "running". Cannot mark as stuck.`);
1067
+ return true;
1068
+ }
1069
+ // Patch the run file on disk
1070
+ run.status = "failed";
1071
+ run.error = "Manually marked as stuck (no recent activity)";
1072
+ run.finishedAt = new Date().toISOString();
1073
+ try {
1074
+ writeFileSync(runPath, JSON.stringify(run, null, 2) + "\n", "utf-8");
1075
+ }
1076
+ catch (err) {
1077
+ errorResponse(res, 500, `Failed to update run: ${err instanceof Error ? err.message : String(err)}`);
1078
+ return true;
1079
+ }
1080
+ // Invalidate status cache so sidebar shows updated active/stale counts
1081
+ clearStatusCache();
1082
+ jsonResponse(res, 200, { id: runId, status: "failed", markedStuckAt: run.finishedAt });
1083
+ return true;
1084
+ }
1085
+ // ── Heartbeat monitor ─────────────────────────────────────────────────
1086
+ /**
1087
+ * Start a periodic heartbeat monitor that scans for unresponsive running tasks
1088
+ * and broadcasts alerts via WebSocket.
1089
+ *
1090
+ * The monitor runs every 30 seconds and broadcasts:
1091
+ * - `hench:heartbeat-alert` when a task transitions to "warning" or "unresponsive"
1092
+ * - `hench:heartbeat-status` with a summary of all running task heartbeats
1093
+ *
1094
+ * Call this once at server startup. The timer is unref'd so it won't prevent
1095
+ * process exit.
1096
+ */
1097
+ export function startHeartbeatMonitor(runsDir, broadcast) {
1098
+ // Track previously-alerted runs to only broadcast on transitions
1099
+ const alertedRuns = new Map();
1100
+ const timer = setInterval(() => {
1101
+ let files;
1102
+ try {
1103
+ files = readdirSync(runsDir);
1104
+ }
1105
+ catch {
1106
+ return; // runs dir may not exist yet
1107
+ }
1108
+ const now = Date.now();
1109
+ const alerts = [];
1110
+ const activeRunIds = new Set();
1111
+ for (const file of files) {
1112
+ if (!file.endsWith(".json"))
1113
+ continue;
1114
+ const id = file.replace(/\.json$/, "");
1115
+ const run = loadRunFile(runsDir, id);
1116
+ if (!run || run.status !== "running")
1117
+ continue;
1118
+ activeRunIds.add(id);
1119
+ const lastActivity = run.lastActivityAt;
1120
+ const lastActivityMs = lastActivity ? new Date(lastActivity).getTime() : null;
1121
+ const hb = computeHeartbeatStatus(lastActivityMs, now);
1122
+ // Only alert on transitions to warning or unresponsive
1123
+ const previousStatus = alertedRuns.get(id);
1124
+ if (hb.status !== "healthy" &&
1125
+ hb.status !== "unknown" &&
1126
+ hb.status !== previousStatus) {
1127
+ alerts.push({
1128
+ runId: run.id,
1129
+ taskId: run.taskId,
1130
+ taskTitle: run.taskTitle,
1131
+ heartbeatStatus: hb.status,
1132
+ missedHeartbeats: hb.missedHeartbeats,
1133
+ lastActivityAt: lastActivity,
1134
+ });
1135
+ }
1136
+ alertedRuns.set(id, hb.status);
1137
+ }
1138
+ // Clean up stale entries from alertedRuns
1139
+ for (const id of alertedRuns.keys()) {
1140
+ if (!activeRunIds.has(id)) {
1141
+ alertedRuns.delete(id);
1142
+ }
1143
+ }
1144
+ // Broadcast alerts for newly-unresponsive tasks
1145
+ for (const alert of alerts) {
1146
+ broadcast({
1147
+ type: "hench:heartbeat-alert",
1148
+ ...alert,
1149
+ timestamp: new Date().toISOString(),
1150
+ });
1151
+ }
1152
+ }, HEARTBEAT_INTERVAL_MS);
1153
+ // Don't prevent process exit
1154
+ if (timer.unref) {
1155
+ timer.unref();
1156
+ }
1157
+ }
1158
+ /**
1159
+ * Start a periodic concurrency status broadcaster.
1160
+ *
1161
+ * Broadcasts `hench:concurrency-status` via WebSocket every 10 seconds
1162
+ * with current process count, max limit, utilization level, and queue info.
1163
+ * This enables real-time updates of the concurrency panel in the dashboard.
1164
+ *
1165
+ * Call this once at server startup alongside startHeartbeatMonitor.
1166
+ * The timer is unref'd so it won't prevent process exit.
1167
+ */
1168
+ export function startConcurrencyMonitor(ctx, broadcast) {
1169
+ const CONCURRENCY_BROADCAST_MS = 10_000; // 10 seconds
1170
+ const timer = setInterval(() => {
1171
+ const henchDir = join(ctx.projectDir, ".hench");
1172
+ const locksDir = join(henchDir, "locks");
1173
+ const runsDir = join(henchDir, "runs");
1174
+ // Read max concurrent (respects runtime override from throttle controls)
1175
+ const maxConcurrent = getEffectiveMaxConcurrent(ctx.projectDir);
1176
+ // Read lock files
1177
+ let processCount = 0;
1178
+ try {
1179
+ const files = readdirSync(locksDir);
1180
+ for (const file of files) {
1181
+ if (!file.endsWith(".lock"))
1182
+ continue;
1183
+ try {
1184
+ const raw = readFileSync(join(locksDir, file), "utf-8");
1185
+ const lock = JSON.parse(raw);
1186
+ if (isPidAlive(lock.pid))
1187
+ processCount++;
1188
+ }
1189
+ catch {
1190
+ // skip corrupted lock files
1191
+ }
1192
+ }
1193
+ }
1194
+ catch {
1195
+ // locks dir doesn't exist yet
1196
+ }
1197
+ // Dashboard active
1198
+ const dashboardRunning = Array.from(activeExecutions.values()).filter((e) => e.state.status === "running" || e.state.status === "starting").length;
1199
+ // Disk running
1200
+ const dashboardTaskIds = new Set(activeExecutions.keys());
1201
+ let diskRunning = 0;
1202
+ try {
1203
+ const runFiles = readdirSync(runsDir);
1204
+ for (const file of runFiles) {
1205
+ if (!file.endsWith(".json"))
1206
+ continue;
1207
+ const id = file.replace(/\.json$/, "");
1208
+ const run = loadRunFile(runsDir, id);
1209
+ if (run && run.status === "running" && !dashboardTaskIds.has(run.taskId)) {
1210
+ diskRunning++;
1211
+ }
1212
+ }
1213
+ }
1214
+ catch {
1215
+ // runs dir may not exist
1216
+ }
1217
+ const totalRunning = dashboardRunning + diskRunning;
1218
+ const utilization = maxConcurrent > 0 ? processCount / maxConcurrent : 0;
1219
+ let level;
1220
+ if (processCount >= maxConcurrent) {
1221
+ level = "at_limit";
1222
+ }
1223
+ else if (utilization >= 0.67) {
1224
+ level = "high";
1225
+ }
1226
+ else if (utilization > 0) {
1227
+ level = "moderate";
1228
+ }
1229
+ else {
1230
+ level = "low";
1231
+ }
1232
+ broadcast({
1233
+ type: "hench:concurrency-status",
1234
+ processCount,
1235
+ maxConcurrent,
1236
+ slotsAvailable: Math.max(0, maxConcurrent - processCount),
1237
+ level,
1238
+ utilization: Math.min(1, utilization),
1239
+ totalRunning,
1240
+ dashboardActive: activeExecutions.size,
1241
+ diskRunning,
1242
+ timestamp: new Date().toISOString(),
1243
+ });
1244
+ }, CONCURRENCY_BROADCAST_MS);
1245
+ if (timer.unref) {
1246
+ timer.unref();
1247
+ }
1248
+ }
1249
+ /**
1250
+ * Determine memory health level based on system memory usage percentage.
1251
+ *
1252
+ * - healthy: < 75% used (green)
1253
+ * - warning: 75–90% used (yellow/orange)
1254
+ * - critical: ≥ 90% used (red)
1255
+ */
1256
+ function computeMemoryHealth(usedPercent) {
1257
+ if (usedPercent >= 90)
1258
+ return "critical";
1259
+ if (usedPercent >= 75)
1260
+ return "warning";
1261
+ return "healthy";
1262
+ }
1263
+ /**
1264
+ * Attempt to read RSS (resident set size) for a given PID.
1265
+ *
1266
+ * Uses /proc/<pid>/statm on Linux and `ps` on macOS/other.
1267
+ * Returns null if the PID is unreachable or the read fails.
1268
+ */
1269
+ function getProcessRss(pid) {
1270
+ try {
1271
+ // Linux: read from /proc filesystem (no child process needed)
1272
+ try {
1273
+ const statm = readFileSync(`/proc/${pid}/statm`, "utf-8");
1274
+ const pages = parseInt(statm.split(" ")[1], 10);
1275
+ if (!isNaN(pages)) {
1276
+ // Page size is typically 4096 bytes
1277
+ return pages * 4096;
1278
+ }
1279
+ }
1280
+ catch {
1281
+ // Not Linux or PID gone — fall through to ps
1282
+ }
1283
+ // macOS / other: use ps command
1284
+ const out = execFileSync("ps", ["-o", "rss=", "-p", String(pid)], {
1285
+ timeout: 2000,
1286
+ encoding: "utf-8",
1287
+ });
1288
+ const kb = parseInt(out.trim(), 10);
1289
+ if (!isNaN(kb))
1290
+ return kb * 1024;
1291
+ return null;
1292
+ }
1293
+ catch {
1294
+ return null;
1295
+ }
1296
+ }
1297
+ /** Collect full memory status snapshot. */
1298
+ function collectMemoryStatus() {
1299
+ const totalBytes = totalmem();
1300
+ const freeBytes = freemem();
1301
+ const usedBytes = totalBytes - freeBytes;
1302
+ const usedPercent = totalBytes > 0 ? Math.round((usedBytes / totalBytes) * 100) : 0;
1303
+ const mem = process.memoryUsage();
1304
+ const load = loadavg();
1305
+ const cpuCount = cpus().length;
1306
+ // Collect per-process memory for active executions
1307
+ const processes = [];
1308
+ for (const [taskId, entry] of activeExecutions.entries()) {
1309
+ const pid = entry.handle.pid;
1310
+ if (pid == null)
1311
+ continue;
1312
+ const rssBytes = getProcessRss(pid);
1313
+ if (rssBytes != null) {
1314
+ processes.push({
1315
+ taskId,
1316
+ taskTitle: entry.state.taskTitle,
1317
+ pid,
1318
+ rssBytes,
1319
+ source: "dashboard",
1320
+ });
1321
+ }
1322
+ }
1323
+ return {
1324
+ system: { totalBytes, freeBytes, usedBytes, usedPercent },
1325
+ server: {
1326
+ pid: process.pid,
1327
+ rssBytes: mem.rss,
1328
+ heapUsedBytes: mem.heapUsed,
1329
+ heapTotalBytes: mem.heapTotal,
1330
+ externalBytes: mem.external,
1331
+ },
1332
+ processes,
1333
+ health: computeMemoryHealth(usedPercent),
1334
+ loadAvg: load,
1335
+ cpuCount,
1336
+ timestamp: new Date().toISOString(),
1337
+ };
1338
+ }
1339
+ /** GET /api/hench/metrics — concurrent execution metrics and resource utilization. */
1340
+ function handleMetrics(res) {
1341
+ const summary = executionMetrics.getSummary();
1342
+ jsonResponse(res, 200, summary);
1343
+ return true;
1344
+ }
1345
+ /** GET /api/hench/metrics/snapshots — time-series execution metrics snapshots. */
1346
+ function handleMetricsSnapshots(res) {
1347
+ const snapshots = executionMetrics.getSnapshots();
1348
+ jsonResponse(res, 200, {
1349
+ snapshots,
1350
+ count: snapshots.length,
1351
+ maxSnapshots: executionMetrics.config.maxSnapshots,
1352
+ timestamp: new Date().toISOString(),
1353
+ });
1354
+ return true;
1355
+ }
1356
+ /** GET /api/hench/memory — system memory, per-process memory, and resource health. */
1357
+ function handleMemory(res) {
1358
+ const status = collectMemoryStatus();
1359
+ jsonResponse(res, 200, status);
1360
+ return true;
1361
+ }
1362
+ /** GET /api/hench/memory/history — per-process memory history for all tracked processes. */
1363
+ function handleMemoryHistory(res) {
1364
+ const histories = processMemoryTracker.getAllHistories();
1365
+ jsonResponse(res, 200, {
1366
+ histories,
1367
+ activeProcesses: processMemoryTracker.activeCount,
1368
+ completedProcesses: processMemoryTracker.completedCount,
1369
+ timestamp: new Date().toISOString(),
1370
+ });
1371
+ return true;
1372
+ }
1373
+ /** GET /api/hench/memory/history/:taskId — memory history for a specific task. */
1374
+ function handleMemoryHistoryByTask(taskId, res) {
1375
+ const history = processMemoryTracker.getHistory(taskId);
1376
+ if (!history) {
1377
+ jsonResponse(res, 404, {
1378
+ error: "not_found",
1379
+ message: `No memory history for task ${taskId}`,
1380
+ });
1381
+ return true;
1382
+ }
1383
+ jsonResponse(res, 200, history);
1384
+ return true;
1385
+ }
1386
+ /** GET /api/hench/memory/leaks — leak detection summary for all active processes. */
1387
+ function handleMemoryLeaks(res) {
1388
+ const summary = processMemoryTracker.detectLeaks();
1389
+ jsonResponse(res, 200, summary);
1390
+ return true;
1391
+ }
1392
+ /**
1393
+ * Periodically broadcast memory + resource health via WebSocket.
1394
+ * Runs every 10 seconds so the memory panel stays live.
1395
+ *
1396
+ * Also records per-process RSS samples into the process memory tracker
1397
+ * for historical analysis and leak detection.
1398
+ */
1399
+ export function startMemoryMonitor(broadcast) {
1400
+ const MEMORY_BROADCAST_MS = 10_000;
1401
+ const timer = setInterval(() => {
1402
+ const status = collectMemoryStatus();
1403
+ // Record per-process samples for historical tracking + leak detection
1404
+ for (const proc of status.processes) {
1405
+ processMemoryTracker.recordSample(proc.taskId, proc.taskTitle, proc.pid, proc.rssBytes);
1406
+ }
1407
+ // Record execution metrics snapshot (concurrent count, total RSS, per-task)
1408
+ const totalRssBytes = status.processes.reduce((sum, p) => sum + p.rssBytes, 0);
1409
+ executionMetrics.recordSnapshot({
1410
+ concurrentCount: status.processes.length,
1411
+ totalRssBytes,
1412
+ systemMemoryPercent: status.system.usedPercent,
1413
+ loadAvg1m: status.loadAvg[0],
1414
+ perTaskRss: status.processes.map((p) => ({
1415
+ taskId: p.taskId,
1416
+ rssBytes: p.rssBytes,
1417
+ })),
1418
+ });
1419
+ // Prune tracker entries for processes that are no longer active
1420
+ // (the activeExecutions map is the source of truth)
1421
+ for (const history of processMemoryTracker.getActiveHistories()) {
1422
+ if (!activeExecutions.has(history.taskId)) {
1423
+ processMemoryTracker.markCompleted(history.taskId);
1424
+ }
1425
+ }
1426
+ // Include leak alerts in the broadcast when detected
1427
+ const leakAlerts = processMemoryTracker.getLeakAlerts();
1428
+ // Include execution metrics summary in the broadcast
1429
+ const metricsSummary = executionMetrics.getSummary();
1430
+ broadcast({
1431
+ type: "hench:memory-status",
1432
+ ...status,
1433
+ ...(leakAlerts.length > 0 ? { leakAlerts } : {}),
1434
+ executionMetrics: metricsSummary,
1435
+ });
1436
+ }, MEMORY_BROADCAST_MS);
1437
+ if (timer.unref) {
1438
+ timer.unref();
1439
+ }
1440
+ }
1441
+ /** Default max concurrent processes (matches hench DEFAULT_HENCH_CONFIG). */
1442
+ const DEFAULT_MAX_CONCURRENT_PROCESSES = 3;
1443
+ /** Check whether a process with the given PID is still alive. */
1444
+ function isPidAlive(pid) {
1445
+ try {
1446
+ process.kill(pid, 0);
1447
+ return true;
1448
+ }
1449
+ catch {
1450
+ return false;
1451
+ }
1452
+ }
1453
+ const throttleState = {
1454
+ paused: false,
1455
+ pausedAt: null,
1456
+ concurrencyOverride: null,
1457
+ lastEmergencyStopAt: null,
1458
+ lastEmergencyStopCount: 0,
1459
+ };
1460
+ /**
1461
+ * Get the effective max concurrent processes, respecting the runtime
1462
+ * override when set.
1463
+ */
1464
+ function getEffectiveMaxConcurrent(projectDir) {
1465
+ if (throttleState.concurrencyOverride !== null) {
1466
+ return throttleState.concurrencyOverride;
1467
+ }
1468
+ const config = loadHenchConfig(projectDir);
1469
+ const guard = config?.guard;
1470
+ return typeof guard?.maxConcurrentProcesses === "number"
1471
+ ? guard.maxConcurrentProcesses
1472
+ : DEFAULT_MAX_CONCURRENT_PROCESSES;
1473
+ }
1474
+ /**
1475
+ * GET /api/hench/concurrency — returns concurrent execution status.
1476
+ *
1477
+ * Combines three data sources:
1478
+ * 1. PID lock files in .hench/locks/ (cross-process limiter)
1479
+ * 2. In-memory dashboard-triggered executions
1480
+ * 3. Disk-based running runs (.hench/runs/)
1481
+ *
1482
+ * Returns current/max counts, queue info, pending PRD tasks, and
1483
+ * a utilization level for visual indicators.
1484
+ */
1485
+ function handleConcurrency(res, ctx) {
1486
+ const henchDir = join(ctx.projectDir, ".hench");
1487
+ const locksDir = join(henchDir, "locks");
1488
+ const runsDir = join(henchDir, "runs");
1489
+ // 1. Read max concurrent (respects runtime override from throttle controls)
1490
+ const maxConcurrent = getEffectiveMaxConcurrent(ctx.projectDir);
1491
+ // 2. Read lock files and check PID liveness
1492
+ const activeLocks = [];
1493
+ try {
1494
+ const files = readdirSync(locksDir);
1495
+ for (const file of files) {
1496
+ if (!file.endsWith(".lock"))
1497
+ continue;
1498
+ try {
1499
+ const raw = readFileSync(join(locksDir, file), "utf-8");
1500
+ const lock = JSON.parse(raw);
1501
+ const alive = isPidAlive(lock.pid);
1502
+ activeLocks.push({
1503
+ pid: lock.pid,
1504
+ startedAt: lock.startedAt,
1505
+ taskId: lock.taskId,
1506
+ alive,
1507
+ });
1508
+ }
1509
+ catch {
1510
+ // Corrupted lock file — skip
1511
+ }
1512
+ }
1513
+ }
1514
+ catch {
1515
+ // Locks dir doesn't exist yet — no active locks
1516
+ }
1517
+ const aliveLocks = activeLocks.filter((l) => l.alive);
1518
+ // 3. Count dashboard-triggered executions
1519
+ const dashboardActive = activeExecutions.size;
1520
+ const dashboardRunning = Array.from(activeExecutions.values()).filter((e) => e.state.status === "running" || e.state.status === "starting").length;
1521
+ // 4. Count disk-based running runs (excludes dashboard-tracked ones)
1522
+ const dashboardTaskIds = new Set(activeExecutions.keys());
1523
+ let diskRunningCount = 0;
1524
+ try {
1525
+ const runFiles = readdirSync(runsDir);
1526
+ for (const file of runFiles) {
1527
+ if (!file.endsWith(".json"))
1528
+ continue;
1529
+ const id = file.replace(/\.json$/, "");
1530
+ const run = loadRunFile(runsDir, id);
1531
+ if (run && run.status === "running" && !dashboardTaskIds.has(run.taskId)) {
1532
+ diskRunningCount++;
1533
+ }
1534
+ }
1535
+ }
1536
+ catch {
1537
+ // runs dir may not exist
1538
+ }
1539
+ // 5. Count pending PRD tasks
1540
+ let pendingTaskCount = 0;
1541
+ try {
1542
+ const prd = loadPRDSync(ctx.rexDir);
1543
+ if (prd && Array.isArray(prd.items)) {
1544
+ pendingTaskCount = countPendingTasks(prd.items);
1545
+ }
1546
+ }
1547
+ catch {
1548
+ // PRD not available
1549
+ }
1550
+ // 6. Compute aggregate counts
1551
+ // The "active process count" is the number of live lock-holding processes,
1552
+ // which is the authoritative cross-process count.
1553
+ const processCount = aliveLocks.length;
1554
+ // Total running tasks combines dashboard + disk sources (deduplicated)
1555
+ const totalRunning = dashboardRunning + diskRunningCount;
1556
+ // Compute utilization level
1557
+ const utilization = maxConcurrent > 0 ? processCount / maxConcurrent : 0;
1558
+ let level;
1559
+ if (processCount >= maxConcurrent) {
1560
+ level = "at_limit";
1561
+ }
1562
+ else if (utilization >= 0.67) {
1563
+ level = "high";
1564
+ }
1565
+ else if (utilization > 0) {
1566
+ level = "moderate";
1567
+ }
1568
+ else {
1569
+ level = "low";
1570
+ }
1571
+ // Slots remaining before limit is reached
1572
+ const slotsAvailable = Math.max(0, maxConcurrent - processCount);
1573
+ jsonResponse(res, 200, {
1574
+ processCount,
1575
+ maxConcurrent,
1576
+ slotsAvailable,
1577
+ level,
1578
+ utilization: Math.min(1, utilization),
1579
+ totalRunning,
1580
+ dashboardActive,
1581
+ diskRunning: diskRunningCount,
1582
+ pendingTasks: pendingTaskCount,
1583
+ locks: aliveLocks.map((l) => ({
1584
+ pid: l.pid,
1585
+ startedAt: l.startedAt,
1586
+ taskId: l.taskId,
1587
+ })),
1588
+ timestamp: new Date().toISOString(),
1589
+ });
1590
+ return true;
1591
+ }
1592
+ /** Recursively count pending/blocked tasks (leaf tasks only). */
1593
+ function countPendingTasks(items) {
1594
+ let count = 0;
1595
+ for (const item of items) {
1596
+ const children = item.children;
1597
+ if (children && children.length > 0) {
1598
+ count += countPendingTasks(children);
1599
+ }
1600
+ else {
1601
+ const status = item.status;
1602
+ if (status === "pending" || status === "blocked") {
1603
+ count++;
1604
+ }
1605
+ }
1606
+ }
1607
+ return count;
1608
+ }
1609
+ /** GET /api/hench/audit — aggregate audit info for all active tasks. */
1610
+ function handleAudit(res, runsDir) {
1611
+ const now = Date.now();
1612
+ const entries = [];
1613
+ // 1. Dashboard-triggered executions (have PID from the managed child handle)
1614
+ for (const [taskId, entry] of activeExecutions.entries()) {
1615
+ const startMs = new Date(entry.state.startedAt).getTime();
1616
+ entries.push({
1617
+ taskId,
1618
+ taskTitle: entry.state.taskTitle,
1619
+ runId: entry.state.runId,
1620
+ pid: entry.handle.pid ?? null,
1621
+ status: entry.state.status,
1622
+ startedAt: entry.state.startedAt,
1623
+ elapsedMs: now - startMs,
1624
+ stale: false, // dashboard executions are tracked in real-time
1625
+ source: "dashboard",
1626
+ lastOutput: entry.state.lastOutput,
1627
+ heartbeatStatus: "healthy", // dashboard executions are tracked in real-time
1628
+ missedHeartbeats: 0,
1629
+ });
1630
+ }
1631
+ // 2. Disk-based running runs (from .hench/runs/*.json)
1632
+ const dashboardTaskIds = new Set(activeExecutions.keys());
1633
+ let files;
1634
+ try {
1635
+ files = readdirSync(runsDir);
1636
+ }
1637
+ catch {
1638
+ files = [];
1639
+ }
1640
+ for (const file of files) {
1641
+ if (!file.endsWith(".json"))
1642
+ continue;
1643
+ const id = file.replace(/\.json$/, "");
1644
+ const run = loadRunFile(runsDir, id);
1645
+ if (!run || run.status !== "running")
1646
+ continue;
1647
+ const runTaskId = run.taskId;
1648
+ // Skip if already tracked by a dashboard execution
1649
+ if (dashboardTaskIds.has(runTaskId))
1650
+ continue;
1651
+ const lastActivity = run.lastActivityAt;
1652
+ const lastActivityMs = lastActivity ? new Date(lastActivity).getTime() : null;
1653
+ const stale = lastActivityMs != null
1654
+ ? (now - lastActivityMs) > STALE_THRESHOLD_MS
1655
+ : true;
1656
+ const startMs = new Date(run.startedAt).getTime();
1657
+ const hb = computeHeartbeatStatus(lastActivityMs, now);
1658
+ entries.push({
1659
+ taskId: runTaskId,
1660
+ taskTitle: run.taskTitle,
1661
+ runId: run.id,
1662
+ pid: null, // PIDs are not tracked in run files
1663
+ status: "running",
1664
+ startedAt: run.startedAt,
1665
+ lastActivityAt: lastActivity,
1666
+ elapsedMs: now - startMs,
1667
+ stale,
1668
+ source: "disk",
1669
+ turns: run.turns,
1670
+ model: run.model,
1671
+ tokenUsage: run.tokenUsage,
1672
+ heartbeatStatus: hb.status,
1673
+ missedHeartbeats: hb.missedHeartbeats,
1674
+ });
1675
+ }
1676
+ // System resource snapshot (process-level, not per-child)
1677
+ const mem = process.memoryUsage();
1678
+ const systemInfo = {
1679
+ serverPid: process.pid,
1680
+ serverUptime: Math.floor(process.uptime()),
1681
+ memoryUsage: {
1682
+ heapUsed: mem.heapUsed,
1683
+ heapTotal: mem.heapTotal,
1684
+ rss: mem.rss,
1685
+ external: mem.external,
1686
+ },
1687
+ activeExecutions: activeExecutions.size,
1688
+ };
1689
+ jsonResponse(res, 200, { entries, systemInfo, timestamp: new Date().toISOString() });
1690
+ return true;
1691
+ }
1692
+ /** POST /api/hench/execute/:taskId/terminate — terminate a running task. */
1693
+ function handleTerminate(taskId, res, runsDir, broadcast) {
1694
+ const entry = activeExecutions.get(taskId);
1695
+ if (!entry) {
1696
+ // Check if there's a disk-based running run we can at least mark as failed
1697
+ let files;
1698
+ try {
1699
+ files = readdirSync(runsDir);
1700
+ }
1701
+ catch {
1702
+ errorResponse(res, 404, `No active execution found for task "${taskId}"`);
1703
+ return true;
1704
+ }
1705
+ for (const file of files) {
1706
+ if (!file.endsWith(".json"))
1707
+ continue;
1708
+ const id = file.replace(/\.json$/, "");
1709
+ const run = loadRunFile(runsDir, id);
1710
+ if (run && run.status === "running" && run.taskId === taskId) {
1711
+ // Mark as terminated on disk
1712
+ run.status = "failed";
1713
+ run.error = "Terminated via audit interface";
1714
+ run.finishedAt = new Date().toISOString();
1715
+ const runPath = join(runsDir, `${id}.json`);
1716
+ try {
1717
+ writeFileSync(runPath, JSON.stringify(run, null, 2) + "\n", "utf-8");
1718
+ }
1719
+ catch (err) {
1720
+ errorResponse(res, 500, `Failed to update run: ${err instanceof Error ? err.message : String(err)}`);
1721
+ return true;
1722
+ }
1723
+ clearStatusCache();
1724
+ jsonResponse(res, 200, {
1725
+ taskId,
1726
+ runId: id,
1727
+ terminated: true,
1728
+ method: "disk-mark",
1729
+ message: "Run marked as terminated (process not managed by dashboard)",
1730
+ });
1731
+ return true;
1732
+ }
1733
+ }
1734
+ errorResponse(res, 404, `No active execution found for task "${taskId}"`);
1735
+ return true;
1736
+ }
1737
+ // Kill the managed process
1738
+ const pid = entry.handle.pid;
1739
+ const killed = entry.handle.kill("SIGTERM");
1740
+ // Update state
1741
+ entry.state.status = "failed";
1742
+ entry.state.finishedAt = new Date().toISOString();
1743
+ entry.state.error = "Terminated via audit interface";
1744
+ broadcastExecState(broadcast, { ...entry.state });
1745
+ processMemoryTracker.markCompleted(taskId);
1746
+ executionMetrics.taskCompleted(taskId);
1747
+ activeExecutions.delete(taskId);
1748
+ clearStatusCache();
1749
+ jsonResponse(res, 200, {
1750
+ taskId,
1751
+ runId: entry.state.runId,
1752
+ pid,
1753
+ terminated: true,
1754
+ signalSent: killed,
1755
+ method: "sigterm",
1756
+ message: "Process terminated",
1757
+ });
1758
+ return true;
1759
+ }
1760
+ /**
1761
+ * Gracefully terminate all active hench executions on server shutdown.
1762
+ *
1763
+ * Iterates over all entries in `activeExecutions`, sends SIGTERM to each
1764
+ * managed child, and waits up to `gracePeriodMs` for them to exit. Any
1765
+ * process that does not exit within the grace period receives SIGKILL.
1766
+ *
1767
+ * This must be called before the HTTP server closes so that child processes
1768
+ * are not orphaned. The function resolves only after all processes have
1769
+ * been signalled and (best-effort) waited for.
1770
+ *
1771
+ * @param gracePeriodMs How long to wait for each process to exit gracefully
1772
+ * before force-killing it. Defaults to 5 000 ms.
1773
+ * Can be overridden via the `HENCH_SHUTDOWN_TIMEOUT_MS`
1774
+ * environment variable.
1775
+ * @returns Counts of terminated and failed executions for verification.
1776
+ */
1777
+ export async function shutdownActiveExecutions(gracePeriodMs = Number(process.env["HENCH_SHUTDOWN_TIMEOUT_MS"] ?? 5_000)) {
1778
+ if (activeExecutions.size === 0)
1779
+ return { terminated: 0, failed: 0 };
1780
+ const count = activeExecutions.size;
1781
+ console.log(`[shutdown] terminating ${count} active execution(s)`);
1782
+ let terminated = 0;
1783
+ let failed = 0;
1784
+ const terminations = Array.from(activeExecutions.entries()).map(async ([taskId, entry]) => {
1785
+ const pid = entry.handle.pid;
1786
+ const pidInfo = pid != null ? ` (pid ${pid})` : "";
1787
+ try {
1788
+ await killWithFallback(entry.handle, gracePeriodMs);
1789
+ console.log(`[shutdown] execution ${taskId}${pidInfo} terminated`);
1790
+ terminated++;
1791
+ }
1792
+ catch (err) {
1793
+ const error = err;
1794
+ console.error(`[shutdown] execution ${taskId}${pidInfo} failed to terminate: ${error.message}`);
1795
+ failed++;
1796
+ }
1797
+ finally {
1798
+ processMemoryTracker.markCompleted(taskId);
1799
+ executionMetrics.taskCompleted(taskId);
1800
+ activeExecutions.delete(taskId);
1801
+ }
1802
+ });
1803
+ await Promise.all(terminations);
1804
+ if (failed === 0) {
1805
+ console.log(`[shutdown] all ${count} execution(s) terminated`);
1806
+ }
1807
+ else {
1808
+ console.error(`[shutdown] ${terminated}/${count} execution(s) terminated — ${failed} failed to exit`);
1809
+ }
1810
+ return { terminated, failed };
1811
+ }
1812
+ // ── Throttle controls ─────────────────────────────────────────────────
1813
+ /**
1814
+ * GET /api/hench/throttle — return current throttle state.
1815
+ *
1816
+ * Includes the effective concurrency limit, pause state, and info
1817
+ * about the config-file default for UI comparison.
1818
+ */
1819
+ function handleThrottleGet(res, ctx) {
1820
+ const config = loadHenchConfig(ctx.projectDir);
1821
+ const guard = config?.guard;
1822
+ const configMax = typeof guard?.maxConcurrentProcesses === "number"
1823
+ ? guard.maxConcurrentProcesses
1824
+ : DEFAULT_MAX_CONCURRENT_PROCESSES;
1825
+ const effective = throttleState.concurrencyOverride ?? configMax;
1826
+ jsonResponse(res, 200, {
1827
+ paused: throttleState.paused,
1828
+ pausedAt: throttleState.pausedAt,
1829
+ concurrencyOverride: throttleState.concurrencyOverride,
1830
+ effectiveMaxConcurrent: effective,
1831
+ configMaxConcurrent: configMax,
1832
+ lastEmergencyStopAt: throttleState.lastEmergencyStopAt,
1833
+ lastEmergencyStopCount: throttleState.lastEmergencyStopCount,
1834
+ activeExecutions: activeExecutions.size,
1835
+ timestamp: new Date().toISOString(),
1836
+ });
1837
+ return true;
1838
+ }
1839
+ /**
1840
+ * PUT /api/hench/throttle — adjust the runtime concurrency override.
1841
+ *
1842
+ * Body: { maxConcurrent: number | null }
1843
+ * Pass null to clear the override and revert to the config-file value.
1844
+ */
1845
+ async function handleThrottleUpdate(req, res, ctx, broadcast) {
1846
+ let body;
1847
+ try {
1848
+ const raw = await readBody(req);
1849
+ body = JSON.parse(raw);
1850
+ }
1851
+ catch {
1852
+ errorResponse(res, 400, "Invalid JSON in request body");
1853
+ return true;
1854
+ }
1855
+ const value = body.maxConcurrent;
1856
+ if (value === null || value === undefined) {
1857
+ // Clear override — revert to config value
1858
+ throttleState.concurrencyOverride = null;
1859
+ }
1860
+ else if (typeof value === "number" && Number.isInteger(value) && value >= 1 && value <= 20) {
1861
+ throttleState.concurrencyOverride = value;
1862
+ }
1863
+ else {
1864
+ errorResponse(res, 400, "maxConcurrent must be an integer between 1 and 20, or null to clear");
1865
+ return true;
1866
+ }
1867
+ // Broadcast updated concurrency status so the concurrency panel refreshes
1868
+ if (broadcast) {
1869
+ broadcastThrottleState(broadcast, ctx);
1870
+ }
1871
+ const effective = getEffectiveMaxConcurrent(ctx.projectDir);
1872
+ jsonResponse(res, 200, {
1873
+ ok: true,
1874
+ concurrencyOverride: throttleState.concurrencyOverride,
1875
+ effectiveMaxConcurrent: effective,
1876
+ });
1877
+ return true;
1878
+ }
1879
+ /**
1880
+ * POST /api/hench/throttle/pause — pause new task executions.
1881
+ *
1882
+ * Running executions continue but no new ones can be started.
1883
+ */
1884
+ function handleThrottlePause(res, broadcast, ctx) {
1885
+ if (throttleState.paused) {
1886
+ errorResponse(res, 409, "Executions are already paused");
1887
+ return true;
1888
+ }
1889
+ throttleState.paused = true;
1890
+ throttleState.pausedAt = new Date().toISOString();
1891
+ if (broadcast && ctx)
1892
+ broadcastThrottleState(broadcast, ctx);
1893
+ jsonResponse(res, 200, {
1894
+ ok: true,
1895
+ paused: true,
1896
+ pausedAt: throttleState.pausedAt,
1897
+ });
1898
+ return true;
1899
+ }
1900
+ /**
1901
+ * POST /api/hench/throttle/resume — resume new task executions.
1902
+ */
1903
+ function handleThrottleResume(res, broadcast, ctx) {
1904
+ if (!throttleState.paused) {
1905
+ errorResponse(res, 409, "Executions are not paused");
1906
+ return true;
1907
+ }
1908
+ throttleState.paused = false;
1909
+ throttleState.pausedAt = null;
1910
+ if (broadcast && ctx)
1911
+ broadcastThrottleState(broadcast, ctx);
1912
+ jsonResponse(res, 200, {
1913
+ ok: true,
1914
+ paused: false,
1915
+ });
1916
+ return true;
1917
+ }
1918
+ /**
1919
+ * POST /api/hench/throttle/emergency-stop — terminate all running executions.
1920
+ *
1921
+ * Sends SIGTERM to every active dashboard-managed execution and pauses new
1922
+ * ones. Body must include `{ confirm: true }` to prevent accidental use.
1923
+ */
1924
+ async function handleEmergencyStop(req, res, broadcast, ctx) {
1925
+ let body;
1926
+ try {
1927
+ const raw = await readBody(req);
1928
+ body = JSON.parse(raw);
1929
+ }
1930
+ catch {
1931
+ errorResponse(res, 400, "Invalid JSON in request body");
1932
+ return true;
1933
+ }
1934
+ if (body.confirm !== true) {
1935
+ errorResponse(res, 400, "Emergency stop requires { confirm: true } in request body");
1936
+ return true;
1937
+ }
1938
+ const count = activeExecutions.size;
1939
+ if (count === 0) {
1940
+ jsonResponse(res, 200, {
1941
+ ok: true,
1942
+ terminated: 0,
1943
+ failed: 0,
1944
+ message: "No active executions to stop",
1945
+ });
1946
+ return true;
1947
+ }
1948
+ // Pause new executions automatically
1949
+ throttleState.paused = true;
1950
+ throttleState.pausedAt = new Date().toISOString();
1951
+ // Terminate all active executions
1952
+ console.log(`[emergency-stop] terminating ${count} active execution(s)`);
1953
+ let terminated = 0;
1954
+ let failed = 0;
1955
+ const terminations = Array.from(activeExecutions.entries()).map(async ([taskId, entry]) => {
1956
+ const pid = entry.handle.pid;
1957
+ const pidInfo = pid != null ? ` (pid ${pid})` : "";
1958
+ try {
1959
+ await killWithFallback(entry.handle, 3000);
1960
+ console.log(`[emergency-stop] execution ${taskId}${pidInfo} terminated`);
1961
+ terminated++;
1962
+ }
1963
+ catch (err) {
1964
+ const error = err;
1965
+ console.error(`[emergency-stop] execution ${taskId}${pidInfo} failed: ${error.message}`);
1966
+ failed++;
1967
+ }
1968
+ finally {
1969
+ // Update state before removing
1970
+ entry.state.status = "failed";
1971
+ entry.state.finishedAt = new Date().toISOString();
1972
+ entry.state.error = "Terminated via emergency stop";
1973
+ broadcastExecState(broadcast, { ...entry.state });
1974
+ processMemoryTracker.markCompleted(taskId);
1975
+ executionMetrics.taskCompleted(taskId);
1976
+ activeExecutions.delete(taskId);
1977
+ }
1978
+ });
1979
+ await Promise.all(terminations);
1980
+ throttleState.lastEmergencyStopAt = new Date().toISOString();
1981
+ throttleState.lastEmergencyStopCount = terminated + failed;
1982
+ if (broadcast && ctx)
1983
+ broadcastThrottleState(broadcast, ctx);
1984
+ clearStatusCache();
1985
+ jsonResponse(res, 200, {
1986
+ ok: true,
1987
+ terminated,
1988
+ failed,
1989
+ paused: true,
1990
+ message: `Emergency stop complete: ${terminated} terminated, ${failed} failed. New executions paused.`,
1991
+ });
1992
+ return true;
1993
+ }
1994
+ /**
1995
+ * Broadcast updated throttle state over WebSocket for real-time UI updates.
1996
+ */
1997
+ function broadcastThrottleState(broadcast, ctx) {
1998
+ const config = loadHenchConfig(ctx.projectDir);
1999
+ const guard = config?.guard;
2000
+ const configMax = typeof guard?.maxConcurrentProcesses === "number"
2001
+ ? guard.maxConcurrentProcesses
2002
+ : DEFAULT_MAX_CONCURRENT_PROCESSES;
2003
+ broadcast({
2004
+ type: "hench:throttle-state",
2005
+ paused: throttleState.paused,
2006
+ pausedAt: throttleState.pausedAt,
2007
+ concurrencyOverride: throttleState.concurrencyOverride,
2008
+ effectiveMaxConcurrent: throttleState.concurrencyOverride ?? configMax,
2009
+ configMaxConcurrent: configMax,
2010
+ lastEmergencyStopAt: throttleState.lastEmergencyStopAt,
2011
+ lastEmergencyStopCount: throttleState.lastEmergencyStopCount,
2012
+ activeExecutions: activeExecutions.size,
2013
+ timestamp: new Date().toISOString(),
2014
+ });
2015
+ }
2016
+ //# sourceMappingURL=routes-hench.js.map