@ashlr/hub 2.2.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 (477) hide show
  1. package/CHANGELOG.md +1158 -0
  2. package/LICENSE +21 -0
  3. package/README.md +833 -0
  4. package/bin/ashlr +8 -0
  5. package/dist/api/core.d.ts +28 -0
  6. package/dist/api/core.js +42 -0
  7. package/dist/api/core.js.map +1 -0
  8. package/dist/api/index.d.ts +9 -0
  9. package/dist/api/index.js +9 -0
  10. package/dist/api/index.js.map +1 -0
  11. package/dist/api/plugin.d.ts +12 -0
  12. package/dist/api/plugin.js +13 -0
  13. package/dist/api/plugin.js.map +1 -0
  14. package/dist/api/types.d.ts +9 -0
  15. package/dist/api/types.js +9 -0
  16. package/dist/api/types.js.map +1 -0
  17. package/dist/cli/args.d.ts +20 -0
  18. package/dist/cli/args.js +23 -0
  19. package/dist/cli/args.js.map +1 -0
  20. package/dist/cli/ask.d.ts +22 -0
  21. package/dist/cli/ask.js +240 -0
  22. package/dist/cli/ask.js.map +1 -0
  23. package/dist/cli/audit.d.ts +26 -0
  24. package/dist/cli/audit.js +199 -0
  25. package/dist/cli/audit.js.map +1 -0
  26. package/dist/cli/backlog.d.ts +26 -0
  27. package/dist/cli/backlog.js +322 -0
  28. package/dist/cli/backlog.js.map +1 -0
  29. package/dist/cli/completions.d.ts +18 -0
  30. package/dist/cli/completions.js +156 -0
  31. package/dist/cli/completions.js.map +1 -0
  32. package/dist/cli/daemon.d.ts +31 -0
  33. package/dist/cli/daemon.js +334 -0
  34. package/dist/cli/daemon.js.map +1 -0
  35. package/dist/cli/demo-sandbox.d.ts +78 -0
  36. package/dist/cli/demo-sandbox.js +227 -0
  37. package/dist/cli/demo-sandbox.js.map +1 -0
  38. package/dist/cli/demo.d.ts +76 -0
  39. package/dist/cli/demo.js +285 -0
  40. package/dist/cli/demo.js.map +1 -0
  41. package/dist/cli/digest.d.ts +46 -0
  42. package/dist/cli/digest.js +352 -0
  43. package/dist/cli/digest.js.map +1 -0
  44. package/dist/cli/doctor-init.d.ts +28 -0
  45. package/dist/cli/doctor-init.js +335 -0
  46. package/dist/cli/doctor-init.js.map +1 -0
  47. package/dist/cli/genome.d.ts +62 -0
  48. package/dist/cli/genome.js +1061 -0
  49. package/dist/cli/genome.js.map +1 -0
  50. package/dist/cli/gh.d.ts +27 -0
  51. package/dist/cli/gh.js +322 -0
  52. package/dist/cli/gh.js.map +1 -0
  53. package/dist/cli/goals.d.ts +55 -0
  54. package/dist/cli/goals.js +667 -0
  55. package/dist/cli/goals.js.map +1 -0
  56. package/dist/cli/health.d.ts +56 -0
  57. package/dist/cli/health.js +407 -0
  58. package/dist/cli/health.js.map +1 -0
  59. package/dist/cli/help.d.ts +51 -0
  60. package/dist/cli/help.js +436 -0
  61. package/dist/cli/help.js.map +1 -0
  62. package/dist/cli/inbox.d.ts +28 -0
  63. package/dist/cli/inbox.js +589 -0
  64. package/dist/cli/inbox.js.map +1 -0
  65. package/dist/cli/index.d.ts +41 -0
  66. package/dist/cli/index.js +1208 -0
  67. package/dist/cli/index.js.map +1 -0
  68. package/dist/cli/knowledge.d.ts +33 -0
  69. package/dist/cli/knowledge.js +575 -0
  70. package/dist/cli/knowledge.js.map +1 -0
  71. package/dist/cli/mcp.d.ts +26 -0
  72. package/dist/cli/mcp.js +487 -0
  73. package/dist/cli/mcp.js.map +1 -0
  74. package/dist/cli/models.d.ts +26 -0
  75. package/dist/cli/models.js +435 -0
  76. package/dist/cli/models.js.map +1 -0
  77. package/dist/cli/new.d.ts +32 -0
  78. package/dist/cli/new.js +565 -0
  79. package/dist/cli/new.js.map +1 -0
  80. package/dist/cli/notify.d.ts +20 -0
  81. package/dist/cli/notify.js +188 -0
  82. package/dist/cli/notify.js.map +1 -0
  83. package/dist/cli/onboard.d.ts +85 -0
  84. package/dist/cli/onboard.js +305 -0
  85. package/dist/cli/onboard.js.map +1 -0
  86. package/dist/cli/open.d.ts +38 -0
  87. package/dist/cli/open.js +86 -0
  88. package/dist/cli/open.js.map +1 -0
  89. package/dist/cli/orient.d.ts +14 -0
  90. package/dist/cli/orient.js +110 -0
  91. package/dist/cli/orient.js.map +1 -0
  92. package/dist/cli/picker.d.ts +21 -0
  93. package/dist/cli/picker.js +177 -0
  94. package/dist/cli/picker.js.map +1 -0
  95. package/dist/cli/plugins.d.ts +21 -0
  96. package/dist/cli/plugins.js +394 -0
  97. package/dist/cli/plugins.js.map +1 -0
  98. package/dist/cli/preflight.d.ts +29 -0
  99. package/dist/cli/preflight.js +131 -0
  100. package/dist/cli/preflight.js.map +1 -0
  101. package/dist/cli/pulse.d.ts +26 -0
  102. package/dist/cli/pulse.js +482 -0
  103. package/dist/cli/pulse.js.map +1 -0
  104. package/dist/cli/reflect.d.ts +42 -0
  105. package/dist/cli/reflect.js +381 -0
  106. package/dist/cli/reflect.js.map +1 -0
  107. package/dist/cli/run.d.ts +29 -0
  108. package/dist/cli/run.js +687 -0
  109. package/dist/cli/run.js.map +1 -0
  110. package/dist/cli/sandbox.d.ts +20 -0
  111. package/dist/cli/sandbox.js +345 -0
  112. package/dist/cli/sandbox.js.map +1 -0
  113. package/dist/cli/seams.d.ts +41 -0
  114. package/dist/cli/seams.js +167 -0
  115. package/dist/cli/seams.js.map +1 -0
  116. package/dist/cli/serve.d.ts +25 -0
  117. package/dist/cli/serve.js +249 -0
  118. package/dist/cli/serve.js.map +1 -0
  119. package/dist/cli/ship.d.ts +33 -0
  120. package/dist/cli/ship.js +433 -0
  121. package/dist/cli/ship.js.map +1 -0
  122. package/dist/cli/spec.d.ts +19 -0
  123. package/dist/cli/spec.js +478 -0
  124. package/dist/cli/spec.js.map +1 -0
  125. package/dist/cli/swarm.d.ts +42 -0
  126. package/dist/cli/swarm.js +1365 -0
  127. package/dist/cli/swarm.js.map +1 -0
  128. package/dist/cli/telemetry.d.ts +26 -0
  129. package/dist/cli/telemetry.js +364 -0
  130. package/dist/cli/telemetry.js.map +1 -0
  131. package/dist/cli/tui.d.ts +17 -0
  132. package/dist/cli/tui.js +52 -0
  133. package/dist/cli/tui.js.map +1 -0
  134. package/dist/cli/ui.d.ts +53 -0
  135. package/dist/cli/ui.js +66 -0
  136. package/dist/cli/ui.js.map +1 -0
  137. package/dist/cli/update.d.ts +38 -0
  138. package/dist/cli/update.js +682 -0
  139. package/dist/cli/update.js.map +1 -0
  140. package/dist/cli/vercel.d.ts +20 -0
  141. package/dist/cli/vercel.js +193 -0
  142. package/dist/cli/vercel.js.map +1 -0
  143. package/dist/cli/verify-safety.d.ts +96 -0
  144. package/dist/cli/verify-safety.js +509 -0
  145. package/dist/cli/verify-safety.js.map +1 -0
  146. package/dist/cli/wire.d.ts +22 -0
  147. package/dist/cli/wire.js +205 -0
  148. package/dist/cli/wire.js.map +1 -0
  149. package/dist/core/classify.d.ts +51 -0
  150. package/dist/core/classify.js +450 -0
  151. package/dist/core/classify.js.map +1 -0
  152. package/dist/core/config.d.ts +63 -0
  153. package/dist/core/config.js +474 -0
  154. package/dist/core/config.js.map +1 -0
  155. package/dist/core/daemon/loop.d.ts +74 -0
  156. package/dist/core/daemon/loop.js +618 -0
  157. package/dist/core/daemon/loop.js.map +1 -0
  158. package/dist/core/daemon/state.d.ts +66 -0
  159. package/dist/core/daemon/state.js +197 -0
  160. package/dist/core/daemon/state.js.map +1 -0
  161. package/dist/core/dashboard.d.ts +40 -0
  162. package/dist/core/dashboard.js +463 -0
  163. package/dist/core/dashboard.js.map +1 -0
  164. package/dist/core/digest/build.d.ts +51 -0
  165. package/dist/core/digest/build.js +230 -0
  166. package/dist/core/digest/build.js.map +1 -0
  167. package/dist/core/digest/deliver.d.ts +47 -0
  168. package/dist/core/digest/deliver.js +230 -0
  169. package/dist/core/digest/deliver.js.map +1 -0
  170. package/dist/core/digest/store.d.ts +57 -0
  171. package/dist/core/digest/store.js +223 -0
  172. package/dist/core/digest/store.js.map +1 -0
  173. package/dist/core/doctor-fix.d.ts +21 -0
  174. package/dist/core/doctor-fix.js +440 -0
  175. package/dist/core/doctor-fix.js.map +1 -0
  176. package/dist/core/doctor.d.ts +18 -0
  177. package/dist/core/doctor.js +806 -0
  178. package/dist/core/doctor.js.map +1 -0
  179. package/dist/core/env-bridge.d.ts +64 -0
  180. package/dist/core/env-bridge.js +103 -0
  181. package/dist/core/env-bridge.js.map +1 -0
  182. package/dist/core/genome/capture.d.ts +49 -0
  183. package/dist/core/genome/capture.js +352 -0
  184. package/dist/core/genome/capture.js.map +1 -0
  185. package/dist/core/genome/consolidate.d.ts +38 -0
  186. package/dist/core/genome/consolidate.js +426 -0
  187. package/dist/core/genome/consolidate.js.map +1 -0
  188. package/dist/core/genome/export.d.ts +29 -0
  189. package/dist/core/genome/export.js +102 -0
  190. package/dist/core/genome/export.js.map +1 -0
  191. package/dist/core/genome/playbook.d.ts +33 -0
  192. package/dist/core/genome/playbook.js +320 -0
  193. package/dist/core/genome/playbook.js.map +1 -0
  194. package/dist/core/genome/recall.d.ts +45 -0
  195. package/dist/core/genome/recall.js +293 -0
  196. package/dist/core/genome/recall.js.map +1 -0
  197. package/dist/core/genome/store.d.ts +62 -0
  198. package/dist/core/genome/store.js +711 -0
  199. package/dist/core/genome/store.js.map +1 -0
  200. package/dist/core/git.d.ts +34 -0
  201. package/dist/core/git.js +115 -0
  202. package/dist/core/git.js.map +1 -0
  203. package/dist/core/goals/advance.d.ts +82 -0
  204. package/dist/core/goals/advance.js +263 -0
  205. package/dist/core/goals/advance.js.map +1 -0
  206. package/dist/core/goals/planner.d.ts +58 -0
  207. package/dist/core/goals/planner.js +233 -0
  208. package/dist/core/goals/planner.js.map +1 -0
  209. package/dist/core/goals/store.d.ts +128 -0
  210. package/dist/core/goals/store.js +442 -0
  211. package/dist/core/goals/store.js.map +1 -0
  212. package/dist/core/inbox/apply.d.ts +36 -0
  213. package/dist/core/inbox/apply.js +407 -0
  214. package/dist/core/inbox/apply.js.map +1 -0
  215. package/dist/core/inbox/notify-proposal.d.ts +13 -0
  216. package/dist/core/inbox/notify-proposal.js +21 -0
  217. package/dist/core/inbox/notify-proposal.js.map +1 -0
  218. package/dist/core/inbox/store.d.ts +67 -0
  219. package/dist/core/inbox/store.js +258 -0
  220. package/dist/core/inbox/store.js.map +1 -0
  221. package/dist/core/index-engine.d.ts +62 -0
  222. package/dist/core/index-engine.js +486 -0
  223. package/dist/core/index-engine.js.map +1 -0
  224. package/dist/core/integrations/desktop-notify.d.ts +18 -0
  225. package/dist/core/integrations/desktop-notify.js +42 -0
  226. package/dist/core/integrations/desktop-notify.js.map +1 -0
  227. package/dist/core/integrations/editors.d.ts +50 -0
  228. package/dist/core/integrations/editors.js +216 -0
  229. package/dist/core/integrations/editors.js.map +1 -0
  230. package/dist/core/integrations/github.d.ts +66 -0
  231. package/dist/core/integrations/github.js +332 -0
  232. package/dist/core/integrations/github.js.map +1 -0
  233. package/dist/core/integrations/identity.d.ts +29 -0
  234. package/dist/core/integrations/identity.js +359 -0
  235. package/dist/core/integrations/identity.js.map +1 -0
  236. package/dist/core/integrations/notify.d.ts +23 -0
  237. package/dist/core/integrations/notify.js +96 -0
  238. package/dist/core/integrations/notify.js.map +1 -0
  239. package/dist/core/integrations/vercel.d.ts +37 -0
  240. package/dist/core/integrations/vercel.js +192 -0
  241. package/dist/core/integrations/vercel.js.map +1 -0
  242. package/dist/core/knowledge/ask.d.ts +34 -0
  243. package/dist/core/knowledge/ask.js +325 -0
  244. package/dist/core/knowledge/ask.js.map +1 -0
  245. package/dist/core/knowledge/graph.d.ts +51 -0
  246. package/dist/core/knowledge/graph.js +564 -0
  247. package/dist/core/knowledge/graph.js.map +1 -0
  248. package/dist/core/knowledge/index.d.ts +74 -0
  249. package/dist/core/knowledge/index.js +586 -0
  250. package/dist/core/knowledge/index.js.map +1 -0
  251. package/dist/core/learn/playbooks.d.ts +84 -0
  252. package/dist/core/learn/playbooks.js +241 -0
  253. package/dist/core/learn/playbooks.js.map +1 -0
  254. package/dist/core/learn/reflect.d.ts +87 -0
  255. package/dist/core/learn/reflect.js +435 -0
  256. package/dist/core/learn/reflect.js.map +1 -0
  257. package/dist/core/learn/store.d.ts +51 -0
  258. package/dist/core/learn/store.js +165 -0
  259. package/dist/core/learn/store.js.map +1 -0
  260. package/dist/core/learn/tuning.d.ts +48 -0
  261. package/dist/core/learn/tuning.js +201 -0
  262. package/dist/core/learn/tuning.js.map +1 -0
  263. package/dist/core/lifecycle/scaffold.d.ts +43 -0
  264. package/dist/core/lifecycle/scaffold.js +260 -0
  265. package/dist/core/lifecycle/scaffold.js.map +1 -0
  266. package/dist/core/lifecycle/ship.d.ts +48 -0
  267. package/dist/core/lifecycle/ship.js +513 -0
  268. package/dist/core/lifecycle/ship.js.map +1 -0
  269. package/dist/core/lifecycle/templates.d.ts +20 -0
  270. package/dist/core/lifecycle/templates.js +605 -0
  271. package/dist/core/lifecycle/templates.js.map +1 -0
  272. package/dist/core/mcp-gateway.d.ts +59 -0
  273. package/dist/core/mcp-gateway.js +385 -0
  274. package/dist/core/mcp-gateway.js.map +1 -0
  275. package/dist/core/mcp-native.d.ts +53 -0
  276. package/dist/core/mcp-native.js +507 -0
  277. package/dist/core/mcp-native.js.map +1 -0
  278. package/dist/core/mcp-registry.d.ts +36 -0
  279. package/dist/core/mcp-registry.js +180 -0
  280. package/dist/core/mcp-registry.js.map +1 -0
  281. package/dist/core/observability/budget-alert.d.ts +18 -0
  282. package/dist/core/observability/budget-alert.js +90 -0
  283. package/dist/core/observability/budget-alert.js.map +1 -0
  284. package/dist/core/observability/estimate.d.ts +27 -0
  285. package/dist/core/observability/estimate.js +188 -0
  286. package/dist/core/observability/estimate.js.map +1 -0
  287. package/dist/core/observability/forecast.d.ts +19 -0
  288. package/dist/core/observability/forecast.js +101 -0
  289. package/dist/core/observability/forecast.js.map +1 -0
  290. package/dist/core/observability/governance.d.ts +28 -0
  291. package/dist/core/observability/governance.js +101 -0
  292. package/dist/core/observability/governance.js.map +1 -0
  293. package/dist/core/observability/otlp.d.ts +88 -0
  294. package/dist/core/observability/otlp.js +217 -0
  295. package/dist/core/observability/otlp.js.map +1 -0
  296. package/dist/core/observability/rollup.d.ts +35 -0
  297. package/dist/core/observability/rollup.js +311 -0
  298. package/dist/core/observability/rollup.js.map +1 -0
  299. package/dist/core/observability/telemetry-sink.d.ts +63 -0
  300. package/dist/core/observability/telemetry-sink.js +350 -0
  301. package/dist/core/observability/telemetry-sink.js.map +1 -0
  302. package/dist/core/observability/usage-source.d.ts +60 -0
  303. package/dist/core/observability/usage-source.js +347 -0
  304. package/dist/core/observability/usage-source.js.map +1 -0
  305. package/dist/core/onboard.d.ts +27 -0
  306. package/dist/core/onboard.js +288 -0
  307. package/dist/core/onboard.js.map +1 -0
  308. package/dist/core/orient.d.ts +23 -0
  309. package/dist/core/orient.js +135 -0
  310. package/dist/core/orient.js.map +1 -0
  311. package/dist/core/phantom.d.ts +23 -0
  312. package/dist/core/phantom.js +279 -0
  313. package/dist/core/phantom.js.map +1 -0
  314. package/dist/core/plugins/host-api.d.ts +29 -0
  315. package/dist/core/plugins/host-api.js +113 -0
  316. package/dist/core/plugins/host-api.js.map +1 -0
  317. package/dist/core/plugins/integrity.d.ts +36 -0
  318. package/dist/core/plugins/integrity.js +73 -0
  319. package/dist/core/plugins/integrity.js.map +1 -0
  320. package/dist/core/plugins/manifest.d.ts +31 -0
  321. package/dist/core/plugins/manifest.js +316 -0
  322. package/dist/core/plugins/manifest.js.map +1 -0
  323. package/dist/core/plugins/registry.d.ts +87 -0
  324. package/dist/core/plugins/registry.js +415 -0
  325. package/dist/core/plugins/registry.js.map +1 -0
  326. package/dist/core/plugins/types.d.ts +182 -0
  327. package/dist/core/plugins/types.js +40 -0
  328. package/dist/core/plugins/types.js.map +1 -0
  329. package/dist/core/plugins/wrappers.d.ts +40 -0
  330. package/dist/core/plugins/wrappers.js +229 -0
  331. package/dist/core/plugins/wrappers.js.map +1 -0
  332. package/dist/core/portfolio/backlog.d.ts +40 -0
  333. package/dist/core/portfolio/backlog.js +177 -0
  334. package/dist/core/portfolio/backlog.js.map +1 -0
  335. package/dist/core/portfolio/scanners.d.ts +21 -0
  336. package/dist/core/portfolio/scanners.js +600 -0
  337. package/dist/core/portfolio/scanners.js.map +1 -0
  338. package/dist/core/providers.d.ts +34 -0
  339. package/dist/core/providers.js +250 -0
  340. package/dist/core/providers.js.map +1 -0
  341. package/dist/core/quality/conventions.d.ts +35 -0
  342. package/dist/core/quality/conventions.js +267 -0
  343. package/dist/core/quality/conventions.js.map +1 -0
  344. package/dist/core/quality/fixes.d.ts +56 -0
  345. package/dist/core/quality/fixes.js +209 -0
  346. package/dist/core/quality/fixes.js.map +1 -0
  347. package/dist/core/quality/health.d.ts +69 -0
  348. package/dist/core/quality/health.js +350 -0
  349. package/dist/core/quality/health.js.map +1 -0
  350. package/dist/core/quality/store.d.ts +56 -0
  351. package/dist/core/quality/store.js +195 -0
  352. package/dist/core/quality/store.js.map +1 -0
  353. package/dist/core/readiness.d.ts +112 -0
  354. package/dist/core/readiness.js +431 -0
  355. package/dist/core/readiness.js.map +1 -0
  356. package/dist/core/run/agent-loop.d.ts +40 -0
  357. package/dist/core/run/agent-loop.js +291 -0
  358. package/dist/core/run/agent-loop.js.map +1 -0
  359. package/dist/core/run/budget.d.ts +47 -0
  360. package/dist/core/run/budget.js +113 -0
  361. package/dist/core/run/budget.js.map +1 -0
  362. package/dist/core/run/engines.d.ts +75 -0
  363. package/dist/core/run/engines.js +199 -0
  364. package/dist/core/run/engines.js.map +1 -0
  365. package/dist/core/run/model-manager.d.ts +64 -0
  366. package/dist/core/run/model-manager.js +339 -0
  367. package/dist/core/run/model-manager.js.map +1 -0
  368. package/dist/core/run/orchestrator.d.ts +100 -0
  369. package/dist/core/run/orchestrator.js +1515 -0
  370. package/dist/core/run/orchestrator.js.map +1 -0
  371. package/dist/core/run/provider-client.d.ts +46 -0
  372. package/dist/core/run/provider-client.js +796 -0
  373. package/dist/core/run/provider-client.js.map +1 -0
  374. package/dist/core/run/retry.d.ts +19 -0
  375. package/dist/core/run/retry.js +68 -0
  376. package/dist/core/run/retry.js.map +1 -0
  377. package/dist/core/run/router.d.ts +50 -0
  378. package/dist/core/run/router.js +257 -0
  379. package/dist/core/run/router.js.map +1 -0
  380. package/dist/core/run/self-heal.d.ts +52 -0
  381. package/dist/core/run/self-heal.js +181 -0
  382. package/dist/core/run/self-heal.js.map +1 -0
  383. package/dist/core/run/streaming.d.ts +31 -0
  384. package/dist/core/run/streaming.js +122 -0
  385. package/dist/core/run/streaming.js.map +1 -0
  386. package/dist/core/run/verify.d.ts +30 -0
  387. package/dist/core/run/verify.js +204 -0
  388. package/dist/core/run/verify.js.map +1 -0
  389. package/dist/core/sandbox/audit.d.ts +31 -0
  390. package/dist/core/sandbox/audit.js +169 -0
  391. package/dist/core/sandbox/audit.js.map +1 -0
  392. package/dist/core/sandbox/policy.d.ts +61 -0
  393. package/dist/core/sandbox/policy.js +211 -0
  394. package/dist/core/sandbox/policy.js.map +1 -0
  395. package/dist/core/sandbox/worktree.d.ts +175 -0
  396. package/dist/core/sandbox/worktree.js +673 -0
  397. package/dist/core/sandbox/worktree.js.map +1 -0
  398. package/dist/core/seams/backlog.d.ts +47 -0
  399. package/dist/core/seams/backlog.js +47 -0
  400. package/dist/core/seams/backlog.js.map +1 -0
  401. package/dist/core/seams/daemon-coordinator.d.ts +72 -0
  402. package/dist/core/seams/daemon-coordinator.js +76 -0
  403. package/dist/core/seams/daemon-coordinator.js.map +1 -0
  404. package/dist/core/seams/genome.d.ts +45 -0
  405. package/dist/core/seams/genome.js +53 -0
  406. package/dist/core/seams/genome.js.map +1 -0
  407. package/dist/core/seams/identity.d.ts +40 -0
  408. package/dist/core/seams/identity.js +44 -0
  409. package/dist/core/seams/identity.js.map +1 -0
  410. package/dist/core/seams/inbox.d.ts +60 -0
  411. package/dist/core/seams/inbox.js +66 -0
  412. package/dist/core/seams/inbox.js.map +1 -0
  413. package/dist/core/seams/index.d.ts +20 -0
  414. package/dist/core/seams/index.js +21 -0
  415. package/dist/core/seams/index.js.map +1 -0
  416. package/dist/core/seams/portfolio.d.ts +50 -0
  417. package/dist/core/seams/portfolio.js +61 -0
  418. package/dist/core/seams/portfolio.js.map +1 -0
  419. package/dist/core/seams/registry.d.ts +42 -0
  420. package/dist/core/seams/registry.js +128 -0
  421. package/dist/core/seams/registry.js.map +1 -0
  422. package/dist/core/seams/run-swarm.d.ts +66 -0
  423. package/dist/core/seams/run-swarm.js +74 -0
  424. package/dist/core/seams/run-swarm.js.map +1 -0
  425. package/dist/core/seams/types.d.ts +123 -0
  426. package/dist/core/seams/types.js +35 -0
  427. package/dist/core/seams/types.js.map +1 -0
  428. package/dist/core/spec/spec-store.d.ts +62 -0
  429. package/dist/core/spec/spec-store.js +359 -0
  430. package/dist/core/spec/spec-store.js.map +1 -0
  431. package/dist/core/swarm/gate.d.ts +45 -0
  432. package/dist/core/swarm/gate.js +114 -0
  433. package/dist/core/swarm/gate.js.map +1 -0
  434. package/dist/core/swarm/planner.d.ts +32 -0
  435. package/dist/core/swarm/planner.js +293 -0
  436. package/dist/core/swarm/planner.js.map +1 -0
  437. package/dist/core/swarm/rollback.d.ts +56 -0
  438. package/dist/core/swarm/rollback.js +266 -0
  439. package/dist/core/swarm/rollback.js.map +1 -0
  440. package/dist/core/swarm/runner.d.ts +62 -0
  441. package/dist/core/swarm/runner.js +1263 -0
  442. package/dist/core/swarm/runner.js.map +1 -0
  443. package/dist/core/swarm/sign.d.ts +71 -0
  444. package/dist/core/swarm/sign.js +362 -0
  445. package/dist/core/swarm/sign.js.map +1 -0
  446. package/dist/core/swarm/store.d.ts +52 -0
  447. package/dist/core/swarm/store.js +195 -0
  448. package/dist/core/swarm/store.js.map +1 -0
  449. package/dist/core/tidy.d.ts +32 -0
  450. package/dist/core/tidy.js +354 -0
  451. package/dist/core/tidy.js.map +1 -0
  452. package/dist/core/tools-registry.d.ts +16 -0
  453. package/dist/core/tools-registry.js +308 -0
  454. package/dist/core/tools-registry.js.map +1 -0
  455. package/dist/core/types.d.ts +2545 -0
  456. package/dist/core/types.js +9 -0
  457. package/dist/core/types.js.map +1 -0
  458. package/dist/core/web/api.d.ts +53 -0
  459. package/dist/core/web/api.js +698 -0
  460. package/dist/core/web/api.js.map +1 -0
  461. package/dist/core/web/public/app.js +1906 -0
  462. package/dist/core/web/public/index.html +721 -0
  463. package/dist/core/web/public/styles.css +2007 -0
  464. package/dist/core/web/server.d.ts +18 -0
  465. package/dist/core/web/server.js +122 -0
  466. package/dist/core/web/server.js.map +1 -0
  467. package/dist/core/web/static.d.ts +18 -0
  468. package/dist/core/web/static.js +122 -0
  469. package/dist/core/web/static.js.map +1 -0
  470. package/dist/tui/app.d.ts +33 -0
  471. package/dist/tui/app.js +350 -0
  472. package/dist/tui/app.js.map +1 -0
  473. package/dist/tui/render.d.ts +20 -0
  474. package/dist/tui/render.js +558 -0
  475. package/dist/tui/render.js.map +1 -0
  476. package/package.json +80 -0
  477. package/schema/config.schema.json +223 -0
@@ -0,0 +1,558 @@
1
+ /**
2
+ * src/tui/render.ts
3
+ *
4
+ * PURE renderer for the interactive TUI dashboard.
5
+ *
6
+ * renderFrame(snap, state) → complete ANSI frame string sized to
7
+ * state.cols × state.rows. No I/O, no side-effects, no timers.
8
+ * Fully testable by snapshotting the returned string.
9
+ *
10
+ * Uses ONLY src/cli/ui.ts helpers (C, stripAnsi, pad, makeColors)
11
+ * and Node built-ins. Zero new runtime deps.
12
+ */
13
+ import { C, stripAnsi, pad, makeColors } from '../cli/ui.js';
14
+ export function renderFrame(snap, state) {
15
+ const { tab, selected, cols, rows } = state;
16
+ // Always render with color (we're building an ANSI string; callers decide
17
+ // whether to write it to a TTY).
18
+ const col = makeColors(true);
19
+ const lines = [];
20
+ // 1. Header (logo + tab bar + clock)
21
+ lines.push(...buildHeader(snap, tab, cols, col));
22
+ // 2. Body (tab-specific content)
23
+ const headerRows = lines.length;
24
+ const footerRows = 1;
25
+ const bodyRows = Math.max(0, rows - headerRows - footerRows);
26
+ lines.push(...buildBody(snap, tab, selected, cols, bodyRows, col));
27
+ // 3. Footer (key hints)
28
+ lines.push(buildFooter(cols, col));
29
+ // Clip to rows (never overflow terminal height)
30
+ const clipped = lines.slice(0, rows);
31
+ // Pad to exactly `rows` lines so the alt-screen is fully painted
32
+ while (clipped.length < rows) {
33
+ clipped.push(fitLine('', cols));
34
+ }
35
+ return clipped.join('\n');
36
+ }
37
+ // ---------------------------------------------------------------------------
38
+ // Header
39
+ // ---------------------------------------------------------------------------
40
+ const TABS = [
41
+ { id: 'overview', label: 'Overview', key: '1' },
42
+ { id: 'runs', label: 'Runs', key: '2' },
43
+ { id: 'swarms', label: 'Swarms', key: '3' },
44
+ { id: 'pulse', label: 'Pulse', key: '4' },
45
+ { id: 'mcp', label: 'MCP', key: '5' },
46
+ { id: 'inbox', label: 'Inbox', key: '6' },
47
+ // M29: read-only org-level portfolio tab.
48
+ { id: 'portfolio', label: 'Portfolio', key: '7' },
49
+ ];
50
+ function buildHeader(snap, activeTab, cols, col) {
51
+ // Row 1: Logo + clock
52
+ const logo = col.bold(col.cyan(' ashlr hub'));
53
+ const clock = col.dim(formatClock(snap.generatedAt));
54
+ const logoLine = fitLine(logo + ' '.repeat(Math.max(1, cols - stripAnsi(logo).length - stripAnsi(clock).length)) + clock, cols);
55
+ // Row 2: Tab bar
56
+ const tabParts = TABS.map(t => {
57
+ const label = ` ${t.key}:${t.label} `;
58
+ return t.id === activeTab
59
+ ? col.bold(`\x1b[7m${label}${C.reset}`) // reverse-video for active tab
60
+ : col.dim(label);
61
+ });
62
+ const tabLine = fitLine(tabParts.join(col.dim('│')), cols);
63
+ // Row 3: separator
64
+ const sep = col.dim('─'.repeat(cols));
65
+ return [logoLine, tabLine, sep];
66
+ }
67
+ // ---------------------------------------------------------------------------
68
+ // Body dispatch
69
+ // ---------------------------------------------------------------------------
70
+ function buildBody(snap, tab, selected, cols, bodyRows, col) {
71
+ switch (tab) {
72
+ case 'overview': return bodyOverview(snap, cols, bodyRows, col);
73
+ case 'runs': return bodyRuns(snap, selected, cols, bodyRows, col);
74
+ case 'swarms': return bodySwarms(snap, selected, cols, bodyRows, col);
75
+ case 'pulse': return bodyPulse(snap, cols, bodyRows, col);
76
+ case 'mcp': return bodyMcp(snap, selected, cols, bodyRows, col);
77
+ case 'inbox': return bodyInbox(snap, cols, bodyRows, col);
78
+ // M29: read-only org-level portfolio view (health/goals/backlog/cost/today).
79
+ case 'portfolio': return bodyPortfolio(snap, cols, bodyRows, col);
80
+ }
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Tab: Overview
84
+ // ---------------------------------------------------------------------------
85
+ function bodyOverview(snap, cols, bodyRows, col) {
86
+ const lines = [];
87
+ const add = (s) => lines.push(fitLine(s, cols));
88
+ const blank = () => add('');
89
+ blank();
90
+ // ── Repos ─────────────────────────────────────────────────────────────────
91
+ add(col.bold(col.blue(' ◆ Repos')));
92
+ add(` Total: ${col.cyan(String(snap.repos.total))}` +
93
+ ` Dirty: ${snap.repos.dirty > 0 ? col.yellow(String(snap.repos.dirty)) : col.green('0')}` +
94
+ ` Stale: ${snap.repos.stale > 0 ? col.dim(String(snap.repos.stale)) : col.green('0')}`);
95
+ blank();
96
+ // ── Tools ─────────────────────────────────────────────────────────────────
97
+ add(col.bold(col.blue(' ◆ Ecosystem Tools')));
98
+ const toolBar = progressBar(snap.tools.installed, snap.tools.total, 20, col);
99
+ add(` ${toolBar} ${col.cyan(String(snap.tools.installed))}/${snap.tools.total} installed`);
100
+ blank();
101
+ // ── Activity ──────────────────────────────────────────────────────────────
102
+ add(col.bold(col.blue(' ◆ Activity (7d)')));
103
+ add(` Sessions: ${col.cyan(String(snap.activity.sessions))}` +
104
+ ` Tokens: ${col.cyan(fmtNum(snap.activity.tokens))}` +
105
+ ` Cost: ${col.yellow('$' + snap.activity.estCostUsd.toFixed(2))}` +
106
+ ` Commits: ${col.cyan(String(snap.activity.commits))}`);
107
+ blank();
108
+ // ── Genome ────────────────────────────────────────────────────────────────
109
+ add(col.bold(col.blue(' ◆ Genome')));
110
+ add(` Entries: ${col.cyan(String(snap.genome.entries))}` +
111
+ ` Projects: ${col.cyan(String(snap.genome.projects))}`);
112
+ blank();
113
+ // ── Quick counts ──────────────────────────────────────────────────────────
114
+ const runCount = snap.runs.length;
115
+ const swarmCount = snap.swarms.length;
116
+ const mcpCount = snap.mcp.filter(m => m.ok).length;
117
+ const inboxPend = snap.inbox?.pending ?? 0;
118
+ add(col.dim(` Runs: ${runCount} Swarms: ${swarmCount} MCP servers up: ${mcpCount}/${snap.mcp.length}`));
119
+ if (inboxPend > 0) {
120
+ blank();
121
+ add(col.bold(col.yellow(' ⚠ Inbox: ')) +
122
+ col.yellow(String(inboxPend)) +
123
+ col.yellow(inboxPend === 1 ? ' proposal awaiting approval' : ' proposals awaiting approval') +
124
+ col.dim(' (use `ashlr inbox approve <id>` to act)'));
125
+ }
126
+ // ── Daemon status (M24) ──────────────────────────────────────────────────
127
+ // snap.daemon is optional — absent when daemon/state.ts not yet present.
128
+ if (snap.daemon) {
129
+ const d = snap.daemon;
130
+ const statusStr = d.running
131
+ ? col.green('running')
132
+ : col.dim('idle');
133
+ blank();
134
+ add(col.bold(col.blue(' ◆ Daemon')));
135
+ add(` Status: ${statusStr}` +
136
+ ` Spend today: ${col.yellow('$' + d.todaySpentUsd.toFixed(4))}` +
137
+ ` Pending proposals: ${d.pendingProposals > 0 ? col.yellow(String(d.pendingProposals)) : col.dim('0')}`);
138
+ }
139
+ return padToRows(lines, bodyRows, cols);
140
+ }
141
+ // ---------------------------------------------------------------------------
142
+ // Tab: Runs
143
+ // ---------------------------------------------------------------------------
144
+ function bodyRuns(snap, selected, cols, bodyRows, col) {
145
+ const lines = [];
146
+ if (snap.runs.length === 0) {
147
+ lines.push(fitLine(col.dim(' (no runs)'), cols));
148
+ return padToRows(lines, bodyRows, cols);
149
+ }
150
+ // Column widths (fixed, then goal gets the rest)
151
+ const idW = 12;
152
+ const statusW = 10;
153
+ const tokW = 10;
154
+ const sep = ' ';
155
+ const goalW = Math.max(8, cols - idW - statusW - tokW - sep.length * 3 - 1);
156
+ // Header row
157
+ lines.push(fitLine(col.bold(pad(' ID', idW) + sep +
158
+ pad('Goal', goalW) + sep +
159
+ pad('Status', statusW) + sep +
160
+ pad('Tokens', tokW, 'right')), cols));
161
+ lines.push(fitLine(col.dim('─'.repeat(cols)), cols));
162
+ snap.runs.forEach((r, i) => {
163
+ const isSelected = i === selected;
164
+ const statusColor = statusColorize(r.status, col);
165
+ const id = trunc(r.id, idW);
166
+ const goal = trunc(r.goal, goalW);
167
+ const status = trunc(r.status, statusW);
168
+ const tokens = fmtNum(r.tokens);
169
+ const rowText = pad(id, idW) + sep +
170
+ pad(goal, goalW) + sep +
171
+ pad(statusColor(status), statusW) + sep +
172
+ pad(tokens, tokW, 'right');
173
+ lines.push(fitLine(isSelected ? `\x1b[7m${rowText}${C.reset}` : rowText, cols));
174
+ });
175
+ return padToRows(lines, bodyRows, cols);
176
+ }
177
+ // ---------------------------------------------------------------------------
178
+ // Tab: Swarms
179
+ // ---------------------------------------------------------------------------
180
+ function bodySwarms(snap, selected, cols, bodyRows, col) {
181
+ const lines = [];
182
+ if (snap.swarms.length === 0) {
183
+ lines.push(fitLine(col.dim(' (no swarms)'), cols));
184
+ return padToRows(lines, bodyRows, cols);
185
+ }
186
+ const idW = 12;
187
+ const statusW = 10;
188
+ const phaseW = 12;
189
+ const barW = 18;
190
+ const sep = ' ';
191
+ const goalW = Math.max(8, cols - idW - statusW - phaseW - barW - sep.length * 4 - 1);
192
+ lines.push(fitLine(col.bold(pad(' ID', idW) + sep +
193
+ pad('Goal', goalW) + sep +
194
+ pad('Status', statusW) + sep +
195
+ pad('Phase', phaseW) + sep +
196
+ pad('Progress', barW)), cols));
197
+ lines.push(fitLine(col.dim('─'.repeat(cols)), cols));
198
+ snap.swarms.forEach((s, i) => {
199
+ const isSelected = i === selected;
200
+ const statusColor = statusColorize(s.status, col);
201
+ const bar = progressBar(s.tasksDone, s.tasksTotal, barW - 8, col);
202
+ const prog = `${bar} ${s.tasksDone}/${s.tasksTotal}`;
203
+ const id = trunc(s.id, idW);
204
+ const goal = trunc(s.goal, goalW);
205
+ const status = trunc(s.status, statusW);
206
+ const phase = trunc(s.phase ?? '—', phaseW);
207
+ const rowText = pad(id, idW) + sep +
208
+ pad(goal, goalW) + sep +
209
+ pad(statusColor(status), statusW) + sep +
210
+ pad(col.dim(phase), phaseW) + sep +
211
+ prog;
212
+ lines.push(fitLine(isSelected ? `\x1b[7m${rowText}${C.reset}` : rowText, cols));
213
+ });
214
+ return padToRows(lines, bodyRows, cols);
215
+ }
216
+ // ---------------------------------------------------------------------------
217
+ // Tab: Pulse
218
+ // ---------------------------------------------------------------------------
219
+ function bodyPulse(snap, cols, bodyRows, col) {
220
+ const lines = [];
221
+ const add = (s) => lines.push(fitLine(s, cols));
222
+ const blank = () => add('');
223
+ blank();
224
+ add(col.bold(col.blue(' ◆ Activity — 7d Totals')));
225
+ blank();
226
+ const { sessions, tokens, estCostUsd, commits } = snap.activity;
227
+ add(` Sessions : ${col.cyan(String(sessions))}`);
228
+ add(` Tokens : ${col.cyan(fmtNum(tokens))}`);
229
+ add(` Est. Cost: ${col.yellow('$' + estCostUsd.toFixed(4))}`);
230
+ add(` Commits : ${col.cyan(String(commits))}`);
231
+ blank();
232
+ // Mini token bar (visual proportion relative to a reference scale).
233
+ // Clamp to a non-negative floor (defense in depth — fullBar is the
234
+ // load-bearing clamp, but this keeps BAR_W sane on narrow terminals).
235
+ const BAR_W = Math.max(0, Math.min(40, cols - 16));
236
+ if (tokens > 0) {
237
+ add(col.bold(col.blue(' ◆ Token Usage Bar')));
238
+ const bar = fullBar(tokens, BAR_W, col);
239
+ add(` ${bar} ${fmtNum(tokens)} tok`);
240
+ blank();
241
+ }
242
+ // Cost breakdown note
243
+ add(col.dim(' Tip: use `ashlr pulse` for full per-project / per-day breakdown.'));
244
+ return padToRows(lines, bodyRows, cols);
245
+ }
246
+ // ---------------------------------------------------------------------------
247
+ // Tab: MCP
248
+ // ---------------------------------------------------------------------------
249
+ function bodyMcp(snap, selected, cols, bodyRows, col) {
250
+ const lines = [];
251
+ if (snap.mcp.length === 0) {
252
+ lines.push(fitLine(col.dim(' (no MCP servers discovered)'), cols));
253
+ return padToRows(lines, bodyRows, cols);
254
+ }
255
+ const statusW = 6;
256
+ const toolsW = 7;
257
+ const sep = ' ';
258
+ const nameW = Math.max(10, cols - statusW - toolsW - sep.length * 2 - 1);
259
+ lines.push(fitLine(col.bold(pad(' Name', nameW) + sep +
260
+ pad('Status', statusW) + sep +
261
+ pad('Tools', toolsW, 'right')), cols));
262
+ lines.push(fitLine(col.dim('─'.repeat(cols)), cols));
263
+ snap.mcp.forEach((m, i) => {
264
+ const isSelected = i === selected;
265
+ const statusStr = m.ok ? col.green(' ●') : col.red(' ●');
266
+ const nameStr = trunc(m.name, nameW);
267
+ const toolsStr = String(m.tools);
268
+ const rowText = pad(nameStr, nameW) + sep +
269
+ pad(statusStr, statusW) + sep +
270
+ pad(toolsStr, toolsW, 'right');
271
+ lines.push(fitLine(isSelected ? `\x1b[7m${rowText}${C.reset}` : rowText, cols));
272
+ });
273
+ // Summary
274
+ const upCount = snap.mcp.filter(m => m.ok).length;
275
+ lines.push('');
276
+ lines.push(fitLine(col.dim(` ${upCount}/${snap.mcp.length} servers online`), cols));
277
+ return padToRows(lines, bodyRows, cols);
278
+ }
279
+ // ---------------------------------------------------------------------------
280
+ // Tab: Inbox (M23 — read-only; approve via `ashlr inbox approve <id>`)
281
+ // ---------------------------------------------------------------------------
282
+ // ---------------------------------------------------------------------------
283
+ // Tab: Portfolio (M29) — READ-ONLY org-level view
284
+ // ---------------------------------------------------------------------------
285
+ /**
286
+ * M29: render the org-level portfolio tab from the OPTIONAL
287
+ * `snap.portfolio` section. READ-ONLY display only — renders the health
288
+ * summary (avg + worst repos), in-flight goals, top backlog, cost + forecast,
289
+ * the effectiveness headline, and the "today" day-over-day delta block. When
290
+ * `snap.portfolio` is absent (older producer / empty enrollment) it renders a
291
+ * single "no portfolio data" line. This function performs NO I/O and mutates
292
+ * nothing.
293
+ */
294
+ function bodyPortfolio(snap, cols, bodyRows, col) {
295
+ const lines = [];
296
+ const add = (s) => lines.push(fitLine(s, cols));
297
+ const blank = () => add('');
298
+ const p = snap.portfolio;
299
+ // Degrade gracefully when no portfolio section was populated (older producer
300
+ // or empty enrollment with no sources). Read-only: this function performs no
301
+ // I/O and mutates nothing.
302
+ if (!p) {
303
+ blank();
304
+ add(col.bold(col.blue(' ◆ Portfolio')));
305
+ blank();
306
+ add(col.dim(' No portfolio data. Enroll repos and run `ashlr health`'));
307
+ add(col.dim(' / `ashlr goals` to populate the org-level view.'));
308
+ return padToRows(lines, bodyRows, cols);
309
+ }
310
+ blank();
311
+ add(col.bold(col.blue(' ◆ Portfolio — Org Health')));
312
+ // ── Health (M27 — enrollment-scoped) ────────────────────────────────────
313
+ const h = p.health;
314
+ if (h.reposScored > 0) {
315
+ add(` Repos scored: ${col.cyan(String(h.reposScored))}` +
316
+ ` Avg score: ${col.cyan(String(Math.round(h.averageScore)))}` +
317
+ ` Grade: ${gradeColorize(h.averageGrade, col)(h.averageGrade)}`);
318
+ if (h.worstRepos.length > 0) {
319
+ add(col.dim(' Needs attention:'));
320
+ for (const w of h.worstRepos) {
321
+ add(` ${col.dim(repoLabel(w.repo))}` +
322
+ ` ${gradeColorize(w.grade, col)(w.grade)}` +
323
+ ` ${col.dim('(' + Math.round(w.score) + ')')}`);
324
+ }
325
+ }
326
+ }
327
+ else {
328
+ add(col.dim(' No enrolled repos scored.'));
329
+ }
330
+ blank();
331
+ // ── In-flight goals (M28) ────────────────────────────────────────────────
332
+ add(col.bold(col.blue(' ◆ Goals in flight')));
333
+ if (p.goalsInFlight.length === 0) {
334
+ add(col.dim(' None active.'));
335
+ }
336
+ else {
337
+ for (const g of p.goalsInFlight) {
338
+ const pct = Math.round(clamp01(g.fractionDone) * 100);
339
+ const bar = progressBar(Math.round(clamp01(g.fractionDone) * 10), 10, 12, col);
340
+ add(` ${bar} ${col.cyan(String(pct) + '%')} ` +
341
+ `${trunc(g.objective, Math.max(8, cols - 28))}`);
342
+ if (g.nextActionable) {
343
+ add(col.dim(` next: ${trunc(g.nextActionable, Math.max(8, cols - 14))}`));
344
+ }
345
+ }
346
+ }
347
+ blank();
348
+ // ── Top backlog (M22) ────────────────────────────────────────────────────
349
+ add(col.bold(col.blue(' ◆ Top backlog')));
350
+ if (p.backlogTop.length === 0) {
351
+ add(col.dim(' Empty.'));
352
+ }
353
+ else {
354
+ for (const item of p.backlogTop) {
355
+ add(` ${col.dim(String(Math.round(item.score)).padStart(4))} ` +
356
+ `${trunc(item.title, Math.max(8, cols - 10))}`);
357
+ }
358
+ }
359
+ blank();
360
+ // ── Cost + forecast (M19) ────────────────────────────────────────────────
361
+ add(col.bold(col.blue(' ◆ Cost (' + p.cost.window + ')')));
362
+ add(` Spent: ${col.yellow('$' + p.cost.spentUsd.toFixed(2))}` +
363
+ ` Saved (local): ${col.green('$' + p.cost.localSavingsUsd.toFixed(2))}` +
364
+ ` Proj./mo: ${col.yellow('$' + p.cost.projectedMonthlyUsd.toFixed(2))}`);
365
+ // ── Effectiveness (M26) ──────────────────────────────────────────────────
366
+ if (p.effectiveness) {
367
+ blank();
368
+ add(col.bold(col.blue(' ◆ Effectiveness')));
369
+ add(` ${col.dim(trunc(p.effectiveness.headline, Math.max(8, cols - 4)))}`);
370
+ }
371
+ // ── Today (day-over-day deltas; null until a prior digest exists) ────────
372
+ blank();
373
+ add(col.bold(col.blue(' ◆ Today')));
374
+ const t = p.today;
375
+ if (t.previousAt === null) {
376
+ add(col.dim(' No prior digest to compare against yet.'));
377
+ }
378
+ else {
379
+ add(` Pending: ${signedDelta(t.pendingProposalsDelta, col)}` +
380
+ ` Dirty: ${signedDelta(t.dirtyReposDelta, col)}` +
381
+ ` Spend: ${signedUsdDelta(t.spendUsdDelta, col)}` +
382
+ ` Health: ${signedDelta(t.healthScoreDelta, col)}` +
383
+ ` Goals: ${signedDelta(t.goalsInFlightDelta, col)}`);
384
+ }
385
+ return padToRows(lines, bodyRows, cols);
386
+ }
387
+ function bodyInbox(snap, cols, bodyRows, col) {
388
+ const lines = [];
389
+ const add = (s) => lines.push(fitLine(s, cols));
390
+ const blank = () => add('');
391
+ blank();
392
+ add(col.bold(col.blue(' ◆ Inbox — Pending Approvals')));
393
+ blank();
394
+ const pending = snap.inbox?.pending ?? 0;
395
+ if (pending === 0) {
396
+ add(col.dim(' No pending proposals. The inbox is clear.'));
397
+ blank();
398
+ add(col.dim(' Tip: use `ashlr inbox` to list all proposals.'));
399
+ return padToRows(lines, bodyRows, cols);
400
+ }
401
+ // Pending count summary.
402
+ add(` ${col.yellow(String(pending))} ` +
403
+ col.yellow(pending === 1 ? 'proposal' : 'proposals') +
404
+ ' awaiting approval.');
405
+ blank();
406
+ // Instructions — approval is CLI-only, not from the TUI.
407
+ add(col.bold(' To act on a proposal:'));
408
+ add(col.dim(' ashlr inbox — list pending proposals'));
409
+ add(col.dim(' ashlr inbox show <id> — view full diff'));
410
+ add(col.dim(' ashlr inbox approve <id> — approve and apply'));
411
+ add(col.dim(' ashlr inbox reject <id> — reject and discard'));
412
+ blank();
413
+ add(col.dim(' Approval is CLI-only. Nothing applies automatically.'));
414
+ return padToRows(lines, bodyRows, cols);
415
+ }
416
+ // ---------------------------------------------------------------------------
417
+ // Footer
418
+ // ---------------------------------------------------------------------------
419
+ function buildFooter(cols, col) {
420
+ const hints = [
421
+ '1-7 tabs',
422
+ 'j/k move',
423
+ 'r refresh',
424
+ 'enter detail',
425
+ 'q quit',
426
+ ].map(h => col.dim(h)).join(col.dim(' · '));
427
+ return fitLine(' ' + hints, cols);
428
+ }
429
+ // ---------------------------------------------------------------------------
430
+ // Helpers
431
+ // ---------------------------------------------------------------------------
432
+ /** Truncate a string to `max` visible characters. */
433
+ function trunc(s, max) {
434
+ const vis = stripAnsi(s);
435
+ if (vis.length <= max)
436
+ return s;
437
+ return vis.slice(0, Math.max(0, max - 1)) + '…';
438
+ }
439
+ /** Fit a line to exactly `cols` visible characters (truncate or right-pad). */
440
+ function fitLine(s, cols) {
441
+ const vis = stripAnsi(s).length;
442
+ if (vis === cols)
443
+ return s;
444
+ if (vis > cols) {
445
+ // Hard-truncate (strip ANSI first to avoid cutting in the middle of a code)
446
+ return stripAnsi(s).slice(0, cols);
447
+ }
448
+ return s + ' '.repeat(cols - vis);
449
+ }
450
+ /** Pad body lines to exactly `rows` rows. */
451
+ function padToRows(lines, rows, cols) {
452
+ const out = lines.slice(0, rows);
453
+ while (out.length < rows) {
454
+ out.push(' '.repeat(cols));
455
+ }
456
+ return out;
457
+ }
458
+ /** A simple ASCII progress bar. */
459
+ function progressBar(done, total, width, col) {
460
+ const w = Math.max(4, width);
461
+ if (total <= 0)
462
+ return col.dim('[' + '─'.repeat(w) + ']');
463
+ const fill = Math.round((done / total) * w);
464
+ const filled = '█'.repeat(Math.min(fill, w));
465
+ const empty = '░'.repeat(Math.max(0, w - fill));
466
+ return '[' + col.green(filled) + col.dim(empty) + ']';
467
+ }
468
+ /** A full-width decorative bar (for the pulse tab). */
469
+ function fullBar(value, width, col) {
470
+ // Visual: filled relative to reference of 1M tokens.
471
+ // Total-safe: clamp width to a non-negative floor and clamp fill into
472
+ // [0, w] so '█'/'░'.repeat() can never receive a negative count and throw
473
+ // a RangeError, no matter how narrow the terminal is. This is the
474
+ // load-bearing fix: renderFrame must never throw from the SIGWINCH /
475
+ // keypress / refresh paths (none of which are wrapped in try/catch).
476
+ const REF = 1_000_000;
477
+ const w = Math.max(0, width);
478
+ const fill = w === 0 ? 0 : Math.max(0, Math.min(w, Math.round(Math.min(1, value / REF) * w)));
479
+ return '[' + col.cyan('█'.repeat(fill)) + col.dim('░'.repeat(w - fill)) + ']';
480
+ }
481
+ /**
482
+ * Color a status string based on known run/swarm lifecycle values.
483
+ * Returns a function that applies the appropriate color.
484
+ */
485
+ function statusColorize(status, col) {
486
+ switch (status) {
487
+ case 'done': return col.green;
488
+ case 'running': return col.cyan;
489
+ case 'planning': return col.blue;
490
+ case 'failed':
491
+ case 'aborted': return col.red;
492
+ default: return col.dim;
493
+ }
494
+ }
495
+ /**
496
+ * Color a portfolio health letter grade (M29). A/B green, C yellow, D/F red.
497
+ * Returns a function so callers can apply it to any label string.
498
+ */
499
+ function gradeColorize(grade, col) {
500
+ switch (grade) {
501
+ case 'A':
502
+ case 'B': return col.green;
503
+ case 'C': return col.yellow;
504
+ case 'D':
505
+ case 'F': return col.red;
506
+ default: return col.dim;
507
+ }
508
+ }
509
+ /** Compact repo label: basename only (read-only display handle). */
510
+ function repoLabel(repo) {
511
+ const parts = repo.split('/').filter(Boolean);
512
+ return parts.length > 0 ? parts[parts.length - 1] : repo;
513
+ }
514
+ /** Clamp a fraction into [0, 1]. */
515
+ function clamp01(n) {
516
+ if (!Number.isFinite(n))
517
+ return 0;
518
+ return Math.max(0, Math.min(1, n));
519
+ }
520
+ /**
521
+ * Render a signed integer-ish delta (M29 "today" block). null → an em-dash;
522
+ * negative red, positive/zero green. Pure, never throws.
523
+ */
524
+ function signedDelta(n, col) {
525
+ if (n === null || !Number.isFinite(n))
526
+ return col.dim('—');
527
+ const s = (n > 0 ? '+' : '') + String(n);
528
+ return n < 0 ? col.red(s) : col.green(s);
529
+ }
530
+ /** Render a signed USD delta (M29 "today" block). null → em-dash. */
531
+ function signedUsdDelta(n, col) {
532
+ if (n === null || !Number.isFinite(n))
533
+ return col.dim('—');
534
+ const s = (n > 0 ? '+$' : n < 0 ? '-$' : '$') + Math.abs(n).toFixed(2);
535
+ return n < 0 ? col.red(s) : col.green(s);
536
+ }
537
+ /** Format a large number with k/M suffixes. */
538
+ function fmtNum(n) {
539
+ if (n >= 1_000_000)
540
+ return (n / 1_000_000).toFixed(1) + 'M';
541
+ if (n >= 1_000)
542
+ return (n / 1_000).toFixed(1) + 'k';
543
+ return String(n);
544
+ }
545
+ /** Format an ISO timestamp as a short wall-clock string (HH:MM:SS). */
546
+ function formatClock(iso) {
547
+ try {
548
+ const d = new Date(iso);
549
+ const hh = String(d.getHours()).padStart(2, '0');
550
+ const mm = String(d.getMinutes()).padStart(2, '0');
551
+ const ss = String(d.getSeconds()).padStart(2, '0');
552
+ return `${hh}:${mm}:${ss}`;
553
+ }
554
+ catch {
555
+ return '';
556
+ }
557
+ }
558
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAa7D,MAAM,UAAU,WAAW,CAAC,IAAuB,EAAE,KAAkB;IACrE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAE5C,0EAA0E;IAC1E,iCAAiC;IACjC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,qCAAqC;IACrC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAEjD,iCAAiC;IACjC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IAChC,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAEnE,wBAAwB;IACxB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAEnC,gDAAgD;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAErC,iEAAiE;IACjE,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,MAAM,IAAI,GAAiD;IACzD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE;IAC/C,EAAE,EAAE,EAAE,MAAM,EAAM,KAAK,EAAE,MAAM,EAAM,GAAG,EAAE,GAAG,EAAE;IAC/C,EAAE,EAAE,EAAE,QAAQ,EAAI,KAAK,EAAE,QAAQ,EAAI,GAAG,EAAE,GAAG,EAAE;IAC/C,EAAE,EAAE,EAAE,OAAO,EAAK,KAAK,EAAE,OAAO,EAAK,GAAG,EAAE,GAAG,EAAE;IAC/C,EAAE,EAAE,EAAE,KAAK,EAAO,KAAK,EAAE,KAAK,EAAO,GAAG,EAAE,GAAG,EAAE;IAC/C,EAAE,EAAE,EAAE,OAAO,EAAK,KAAK,EAAE,OAAO,EAAK,GAAG,EAAE,GAAG,EAAE;IAC/C,0CAA0C;IAC1C,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE;CAClD,CAAC;AAEF,SAAS,WAAW,CAClB,IAAuB,EACvB,SAAiB,EACjB,IAAY,EACZ,GAAkC;IAElC,sBAAsB;IACtB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,OAAO,CACtB,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAC/F,IAAI,CACL,CAAC;IAEF,iBAAiB;IACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC;QACtC,OAAO,CAAC,CAAC,EAAE,KAAK,SAAS;YACvB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,+BAA+B;YACvE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE3D,mBAAmB;IACnB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,SAAS,SAAS,CAChB,IAAuB,EACvB,GAAW,EACX,QAAgB,EAChB,IAAY,EACZ,QAAgB,EAChB,GAAkC;IAElC,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,UAAU,CAAC,CAAC,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChE,KAAK,MAAM,CAAC,CAAK,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtE,KAAK,QAAQ,CAAC,CAAG,OAAO,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACxE,KAAK,OAAO,CAAC,CAAI,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC7D,KAAK,KAAK,CAAC,CAAM,OAAO,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACrE,KAAK,OAAO,CAAC,CAAI,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC7D,6EAA6E;QAC7E,KAAK,WAAW,CAAC,CAAC,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,SAAS,YAAY,CACnB,IAAuB,EACvB,IAAY,EACZ,QAAgB,EAChB,GAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE5B,KAAK,EAAE,CAAC;IAER,6EAA6E;IAC7E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpC,GAAG,CACD,aAAa,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;QACjD,aAAa,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC3F,aAAa,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CACzF,CAAC;IACF,KAAK,EAAE,CAAC;IAER,6EAA6E;IAC7E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7E,GAAG,CAAC,MAAM,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,CAAC;IAC9F,KAAK,EAAE,CAAC;IAER,6EAA6E;IAC7E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC5C,GAAG,CACD,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE;QAC1D,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;QACtD,YAAY,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QACnE,eAAe,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CACzD,CAAC;IACF,KAAK,EAAE,CAAC;IAER,6EAA6E;IAC7E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACrC,GAAG,CACD,eAAe,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;QACtD,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CACzD,CAAC;IACF,KAAK,EAAE,CAAC;IAER,6EAA6E;IAC7E,MAAM,QAAQ,GAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACtC,MAAM,QAAQ,GAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,SAAS,GAAI,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC;IAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,CACT,YAAY,QAAQ,cAAc,UAAU,sBAAsB,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAChG,CAAC,CAAC;IACH,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,KAAK,EAAE,CAAC;QACR,GAAG,CACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACnC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,8BAA8B,CAAC;YAC5F,GAAG,CAAC,GAAG,CAAC,2CAA2C,CAAC,CACrD,CAAC;IACJ,CAAC;IAGD,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO;YACzB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YACtB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,KAAK,EAAE,CAAC;QACR,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACrC,GAAG,CACD,cAAc,SAAS,EAAE;YACzB,mBAAmB,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YACjE,yBAAyB,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAC1G,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,SAAS,QAAQ,CACf,IAAuB,EACvB,QAAgB,EAChB,IAAY,EACZ,QAAgB,EAChB,GAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAClD,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,iDAAiD;IACjD,MAAM,GAAG,GAAO,EAAE,CAAC;IACnB,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,IAAI,GAAM,EAAE,CAAC;IACnB,MAAM,GAAG,GAAO,IAAI,CAAC;IACrB,MAAM,KAAK,GAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9E,aAAa;IACb,KAAK,CAAC,IAAI,CAAC,OAAO,CAChB,GAAG,CAAC,IAAI,CACN,GAAG,CAAC,KAAK,EAAQ,GAAG,CAAC,GAAG,GAAG;QAC3B,GAAG,CAAC,MAAM,EAAO,KAAK,CAAC,GAAG,GAAG;QAC7B,GAAG,CAAC,QAAQ,EAAK,OAAO,CAAC,GAAG,GAAG;QAC/B,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAC7B,EACD,IAAI,CACL,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,UAAU,GAAG,CAAC,KAAK,QAAQ,CAAC;QAClC,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,EAAE,GAAS,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAO,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,MAAM,GAAK,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,OAAO,GACX,GAAG,CAAC,EAAE,EAAM,GAAG,CAAC,GAAO,GAAG;YAC1B,GAAG,CAAC,IAAI,EAAI,KAAK,CAAC,GAAK,GAAG;YAC1B,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,GAAG;YACvC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE7B,KAAK,CAAC,IAAI,CAAC,OAAO,CAChB,UAAU,CAAC,CAAC,CAAC,UAAU,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EACpD,IAAI,CACL,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,SAAS,UAAU,CACjB,IAAuB,EACvB,QAAgB,EAChB,IAAY,EACZ,QAAgB,EAChB,GAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,GAAG,GAAO,EAAE,CAAC;IACnB,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,MAAM,GAAI,EAAE,CAAC;IACnB,MAAM,IAAI,GAAM,EAAE,CAAC;IACnB,MAAM,GAAG,GAAO,IAAI,CAAC;IACrB,MAAM,KAAK,GAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEvF,KAAK,CAAC,IAAI,CAAC,OAAO,CAChB,GAAG,CAAC,IAAI,CACN,GAAG,CAAC,KAAK,EAAK,GAAG,CAAC,GAAO,GAAG;QAC5B,GAAG,CAAC,MAAM,EAAI,KAAK,CAAC,GAAK,GAAG;QAC5B,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,GAAG;QAC5B,GAAG,CAAC,OAAO,EAAG,MAAM,CAAC,GAAI,GAAG;QAC5B,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CACtB,EACD,IAAI,CACL,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,CAAC,KAAK,QAAQ,CAAC;QAClC,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;QAErD,MAAM,EAAE,GAAO,KAAK,CAAC,CAAC,CAAC,EAAE,EAAY,GAAG,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAK,KAAK,CAAC,CAAC,CAAC,IAAI,EAAU,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAQ,OAAO,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,OAAO,GACX,GAAG,CAAC,EAAE,EAA2B,GAAG,CAAC,GAAO,GAAG;YAC/C,GAAG,CAAC,IAAI,EAAyB,KAAK,CAAC,GAAK,GAAG;YAC/C,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAU,OAAO,CAAC,GAAG,GAAG;YAC/C,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAe,MAAM,CAAC,GAAI,GAAG;YAC/C,IAAI,CAAC;QAEP,KAAK,CAAC,IAAI,CAAC,OAAO,CAChB,UAAU,CAAC,CAAC,CAAC,UAAU,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EACpD,IAAI,CACL,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,SAAS,SAAS,CAChB,IAAuB,EACvB,IAAY,EACZ,QAAgB,EAChB,GAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE5B,KAAK,EAAE,CAAC;IACR,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,EAAE,CAAC;IAER,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChE,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACnD,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,GAAG,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChE,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,KAAK,EAAE,CAAC;IAER,oEAAoE;IACpE,mEAAmE;IACnE,sEAAsE;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,GAAG,CAAC,MAAM,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,EAAE,CAAC;IACV,CAAC;IAED,sBAAsB;IACtB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;IAEpF,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,SAAS,OAAO,CACd,IAAuB,EACvB,QAAgB,EAChB,IAAY,EACZ,QAAgB,EAChB,GAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACpE,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC;IAClB,MAAM,MAAM,GAAI,CAAC,CAAC;IAClB,MAAM,GAAG,GAAO,IAAI,CAAC;IACrB,MAAM,KAAK,GAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3E,KAAK,CAAC,IAAI,CAAC,OAAO,CAChB,GAAG,CAAC,IAAI,CACN,GAAG,CAAC,OAAO,EAAI,KAAK,CAAC,GAAK,GAAG;QAC7B,GAAG,CAAC,QAAQ,EAAG,OAAO,CAAC,GAAG,GAAG;QAC7B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAC9B,EACD,IAAI,CACL,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,UAAU,GAAG,CAAC,KAAK,QAAQ,CAAC;QAClC,MAAM,SAAS,GAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAM,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEnC,MAAM,OAAO,GACX,GAAG,CAAC,OAAO,EAAG,KAAK,CAAC,GAAK,GAAG;YAC5B,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,GAAG;YAC7B,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAChB,UAAU,CAAC,CAAC,CAAC,UAAU,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EACpD,IAAI,CACL,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU;IACV,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAChB,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,iBAAiB,CAAC,EACzD,IAAI,CACL,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAE9E,8EAA8E;AAC9E,kDAAkD;AAClD,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAS,aAAa,CACpB,IAAuB,EACvB,IAAY,EACZ,QAAgB,EAChB,GAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE5B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;IAEzB,6EAA6E;IAC7E,6EAA6E;IAC7E,2BAA2B;IAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,EAAE,CAAC;QACR,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;QAC1E,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;QACnE,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,EAAE,CAAC;IACR,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;IAErD,2EAA2E;IAC3E,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACtB,GAAG,CACD,oBAAoB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE;YACrD,iBAAiB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YAC/D,aAAa,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAClE,CAAC;QACF,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACpC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC7B,GAAG,CACD,QAAQ,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;oBACpC,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;oBAC3C,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAC/C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,KAAK,EAAE,CAAC;IAER,4EAA4E;IAC5E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/E,GAAG,CACD,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI;gBAC5C,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,CAChD,CAAC;YACF,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;gBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC;IAER,4EAA4E;IAC5E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YAChC,GAAG,CACD,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC7D,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,CAC/C,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC;IAER,4EAA4E;IAC5E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,GAAG,CACD,aAAa,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QAC3D,qBAAqB,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QACzE,gBAAgB,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAC1E,CAAC;IAEF,4EAA4E;IAC5E,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;QACpB,KAAK,EAAE,CAAC;QACR,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC5C,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,4EAA4E;IAC5E,KAAK,EAAE,CAAC;IACR,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAClB,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,GAAG,CACD,eAAe,WAAW,CAAC,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,EAAE;YAC1D,aAAa,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE;YAClD,aAAa,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE;YACnD,cAAc,WAAW,CAAC,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE;YACpD,aAAa,WAAW,CAAC,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE,CACtD,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAChB,IAAuB,EACvB,IAAY,EACZ,QAAgB,EAChB,GAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE5B,KAAK,EAAE,CAAC;IACR,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC;IACxD,KAAK,EAAE,CAAC;IAER,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC;IAEzC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC7D,KAAK,EAAE,CAAC;QACR,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;QACjE,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,yBAAyB;IACzB,GAAG,CACD,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG;QACpC,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;QACpD,qBAAqB,CACtB,CAAC;IACF,KAAK,EAAE,CAAC;IAER,yDAAyD;IACzD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;IACrE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;IAC7D,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAChE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;IACjE,KAAK,EAAE,CAAC;IACR,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;IAExE,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,SAAS,WAAW,CAAC,IAAY,EAAE,GAAkC;IACnE,MAAM,KAAK,GAAG;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;QACd,QAAQ;KACT,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9C,OAAO,OAAO,CAAC,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,qDAAqD;AACrD,SAAS,KAAK,CAAC,CAAS,EAAE,GAAW;IACnC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAChC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAClD,CAAC;AAED,+EAA+E;AAC/E,SAAS,OAAO,CAAC,CAAS,EAAE,IAAY;IACtC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAC3B,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACf,4EAA4E;QAC5E,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,6CAA6C;AAC7C,SAAS,SAAS,CAAC,KAAe,EAAE,IAAY,EAAE,IAAY;IAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mCAAmC;AACnC,SAAS,WAAW,CAClB,IAAY,EACZ,KAAa,EACb,KAAa,EACb,GAAkC;IAElC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACjD,OAAO,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AACxD,CAAC;AAED,uDAAuD;AACvD,SAAS,OAAO,CAAC,KAAa,EAAE,KAAa,EAAE,GAAkC;IAC/E,qDAAqD;IACrD,sEAAsE;IACtE,0EAA0E;IAC1E,kEAAkE;IAClE,qEAAqE;IACrE,qEAAqE;IACrE,MAAM,GAAG,GAAG,SAAS,CAAC;IACtB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,OAAO,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACrB,MAAc,EACd,GAAkC;IAElC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAK,OAAO,GAAG,CAAC,KAAK,CAAC;QAClC,KAAK,SAAS,CAAC,CAAE,OAAO,GAAG,CAAC,IAAI,CAAC;QACjC,KAAK,UAAU,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;QACjC,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC,CAAE,OAAO,GAAG,CAAC,GAAG,CAAC;QAChC,OAAO,CAAC,CAAS,OAAO,GAAG,CAAC,GAAG,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CACpB,KAAa,EACb,GAAkC;IAElC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC;QAC3B,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC;QAC5B,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC;QACzB,OAAO,CAAC,CAAE,OAAO,GAAG,CAAC,GAAG,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,oCAAoC;AACpC,SAAS,OAAO,CAAC,CAAS;IACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,CAAgB,EAChB,GAAkC;IAElC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,qEAAqE;AACrE,SAAS,cAAc,CACrB,CAAgB,EAChB,GAAkC;IAElC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,+CAA+C;AAC/C,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,KAAK;QAAM,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACxD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,uEAAuE;AACvE,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}