@contraagent/ui 0.0.0-stage → 0.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 (731) hide show
  1. package/README.md +137 -2
  2. package/custom-elements.json +7286 -0
  3. package/dist/adapters/check-rows.d.ts +20 -0
  4. package/dist/adapters/check-rows.d.ts.map +1 -0
  5. package/dist/adapters/check-rows.js +77 -0
  6. package/dist/adapters/check-rows.js.map +1 -0
  7. package/dist/adapters/filters.d.ts +29 -0
  8. package/dist/adapters/filters.d.ts.map +1 -0
  9. package/dist/adapters/filters.js +74 -0
  10. package/dist/adapters/filters.js.map +1 -0
  11. package/dist/adapters/graph/compound.d.ts +93 -0
  12. package/dist/adapters/graph/compound.d.ts.map +1 -0
  13. package/dist/adapters/graph/compound.js +322 -0
  14. package/dist/adapters/graph/compound.js.map +1 -0
  15. package/dist/adapters/graph/flow-index.d.ts +54 -0
  16. package/dist/adapters/graph/flow-index.d.ts.map +1 -0
  17. package/dist/adapters/graph/flow-index.js +129 -0
  18. package/dist/adapters/graph/flow-index.js.map +1 -0
  19. package/dist/adapters/graph/highlight.d.ts +14 -0
  20. package/dist/adapters/graph/highlight.d.ts.map +1 -0
  21. package/dist/adapters/graph/highlight.js +33 -0
  22. package/dist/adapters/graph/highlight.js.map +1 -0
  23. package/dist/adapters/graph/input.d.ts +50 -0
  24. package/dist/adapters/graph/input.d.ts.map +1 -0
  25. package/dist/adapters/graph/input.js +201 -0
  26. package/dist/adapters/graph/input.js.map +1 -0
  27. package/dist/adapters/graph/layer.d.ts +33 -0
  28. package/dist/adapters/graph/layer.d.ts.map +1 -0
  29. package/dist/adapters/graph/layer.js +94 -0
  30. package/dist/adapters/graph/layer.js.map +1 -0
  31. package/dist/adapters/graph/matrix.d.ts +62 -0
  32. package/dist/adapters/graph/matrix.d.ts.map +1 -0
  33. package/dist/adapters/graph/matrix.js +96 -0
  34. package/dist/adapters/graph/matrix.js.map +1 -0
  35. package/dist/adapters/graph/project.d.ts +49 -0
  36. package/dist/adapters/graph/project.d.ts.map +1 -0
  37. package/dist/adapters/graph/project.js +319 -0
  38. package/dist/adapters/graph/project.js.map +1 -0
  39. package/dist/adapters/graph/selection.d.ts +31 -0
  40. package/dist/adapters/graph/selection.d.ts.map +1 -0
  41. package/dist/adapters/graph/selection.js +48 -0
  42. package/dist/adapters/graph/selection.js.map +1 -0
  43. package/dist/adapters/graph/states.d.ts +6 -0
  44. package/dist/adapters/graph/states.d.ts.map +1 -0
  45. package/dist/adapters/graph/states.js +5 -0
  46. package/dist/adapters/graph/states.js.map +1 -0
  47. package/dist/adapters/graph/types.d.ts +141 -0
  48. package/dist/adapters/graph/types.d.ts.map +1 -0
  49. package/dist/adapters/graph/types.js +3 -0
  50. package/dist/adapters/graph/types.js.map +1 -0
  51. package/dist/adapters/graph/words.d.ts +48 -0
  52. package/dist/adapters/graph/words.d.ts.map +1 -0
  53. package/dist/adapters/graph/words.js +128 -0
  54. package/dist/adapters/graph/words.js.map +1 -0
  55. package/dist/adapters/index.d.ts +18 -0
  56. package/dist/adapters/index.d.ts.map +1 -0
  57. package/dist/adapters/index.js +23 -0
  58. package/dist/adapters/index.js.map +1 -0
  59. package/dist/adapters/journal-columns.d.ts +21 -0
  60. package/dist/adapters/journal-columns.d.ts.map +1 -0
  61. package/dist/adapters/journal-columns.js +179 -0
  62. package/dist/adapters/journal-columns.js.map +1 -0
  63. package/dist/adapters/kpi-tiles.d.ts +47 -0
  64. package/dist/adapters/kpi-tiles.d.ts.map +1 -0
  65. package/dist/adapters/kpi-tiles.js +173 -0
  66. package/dist/adapters/kpi-tiles.js.map +1 -0
  67. package/dist/adapters/lanes.d.ts +31 -0
  68. package/dist/adapters/lanes.d.ts.map +1 -0
  69. package/dist/adapters/lanes.js +75 -0
  70. package/dist/adapters/lanes.js.map +1 -0
  71. package/dist/adapters/model-shares.d.ts +27 -0
  72. package/dist/adapters/model-shares.d.ts.map +1 -0
  73. package/dist/adapters/model-shares.js +52 -0
  74. package/dist/adapters/model-shares.js.map +1 -0
  75. package/dist/adapters/panel-body.d.ts +34 -0
  76. package/dist/adapters/panel-body.d.ts.map +1 -0
  77. package/dist/adapters/panel-body.js +90 -0
  78. package/dist/adapters/panel-body.js.map +1 -0
  79. package/dist/adapters/preflight.d.ts +12 -0
  80. package/dist/adapters/preflight.d.ts.map +1 -0
  81. package/dist/adapters/preflight.js +15 -0
  82. package/dist/adapters/preflight.js.map +1 -0
  83. package/dist/adapters/task-columns.d.ts +19 -0
  84. package/dist/adapters/task-columns.d.ts.map +1 -0
  85. package/dist/adapters/task-columns.js +107 -0
  86. package/dist/adapters/task-columns.js.map +1 -0
  87. package/dist/adapters/transcript/index.d.ts +6 -0
  88. package/dist/adapters/transcript/index.d.ts.map +1 -0
  89. package/dist/adapters/transcript/index.js +8 -0
  90. package/dist/adapters/transcript/index.js.map +1 -0
  91. package/dist/adapters/transcript/model.d.ts +42 -0
  92. package/dist/adapters/transcript/model.d.ts.map +1 -0
  93. package/dist/adapters/transcript/model.js +128 -0
  94. package/dist/adapters/transcript/model.js.map +1 -0
  95. package/dist/adapters/transcript/rounds.d.ts +15 -0
  96. package/dist/adapters/transcript/rounds.d.ts.map +1 -0
  97. package/dist/adapters/transcript/rounds.js +74 -0
  98. package/dist/adapters/transcript/rounds.js.map +1 -0
  99. package/dist/adapters/transcript/sections.d.ts +18 -0
  100. package/dist/adapters/transcript/sections.d.ts.map +1 -0
  101. package/dist/adapters/transcript/sections.js +69 -0
  102. package/dist/adapters/transcript/sections.js.map +1 -0
  103. package/dist/adapters/transcript/web.d.ts +12 -0
  104. package/dist/adapters/transcript/web.d.ts.map +1 -0
  105. package/dist/adapters/transcript/web.js +39 -0
  106. package/dist/adapters/transcript/web.js.map +1 -0
  107. package/dist/adapters/transcript/who.d.ts +15 -0
  108. package/dist/adapters/transcript/who.d.ts.map +1 -0
  109. package/dist/adapters/transcript/who.js +42 -0
  110. package/dist/adapters/transcript/who.js.map +1 -0
  111. package/dist/adapters/trends.d.ts +11 -0
  112. package/dist/adapters/trends.d.ts.map +1 -0
  113. package/dist/adapters/trends.js +316 -0
  114. package/dist/adapters/trends.js.map +1 -0
  115. package/dist/contraagent-ui.js +1028 -0
  116. package/dist/controllers/locale.d.ts +25 -0
  117. package/dist/controllers/locale.d.ts.map +1 -0
  118. package/dist/controllers/locale.js +33 -0
  119. package/dist/controllers/locale.js.map +1 -0
  120. package/dist/controllers/shortcuts.d.ts +29 -0
  121. package/dist/controllers/shortcuts.d.ts.map +1 -0
  122. package/dist/controllers/shortcuts.js +51 -0
  123. package/dist/controllers/shortcuts.js.map +1 -0
  124. package/dist/controllers/stream.d.ts +41 -0
  125. package/dist/controllers/stream.d.ts.map +1 -0
  126. package/dist/controllers/stream.js +90 -0
  127. package/dist/controllers/stream.js.map +1 -0
  128. package/dist/controllers/task-detail.d.ts +22 -0
  129. package/dist/controllers/task-detail.d.ts.map +1 -0
  130. package/dist/controllers/task-detail.js +50 -0
  131. package/dist/controllers/task-detail.js.map +1 -0
  132. package/dist/controllers/theme.d.ts +32 -0
  133. package/dist/controllers/theme.d.ts.map +1 -0
  134. package/dist/controllers/theme.js +56 -0
  135. package/dist/controllers/theme.js.map +1 -0
  136. package/dist/core/events.d.ts +107 -0
  137. package/dist/core/events.d.ts.map +1 -0
  138. package/dist/core/events.js +5 -0
  139. package/dist/core/events.js.map +1 -0
  140. package/dist/core/i18n.d.ts +21 -0
  141. package/dist/core/i18n.d.ts.map +1 -0
  142. package/dist/core/i18n.js +71 -0
  143. package/dist/core/i18n.js.map +1 -0
  144. package/dist/core/index.d.ts +5 -0
  145. package/dist/core/index.d.ts.map +1 -0
  146. package/dist/core/index.js +7 -0
  147. package/dist/core/index.js.map +1 -0
  148. package/dist/core/memory.d.ts +51 -0
  149. package/dist/core/memory.d.ts.map +1 -0
  150. package/dist/core/memory.js +174 -0
  151. package/dist/core/memory.js.map +1 -0
  152. package/dist/core/scroll.d.ts +21 -0
  153. package/dist/core/scroll.d.ts.map +1 -0
  154. package/dist/core/scroll.js +74 -0
  155. package/dist/core/scroll.js.map +1 -0
  156. package/dist/core/view-route.d.ts +62 -0
  157. package/dist/core/view-route.d.ts.map +1 -0
  158. package/dist/core/view-route.js +143 -0
  159. package/dist/core/view-route.js.map +1 -0
  160. package/dist/core/view-router.d.ts +27 -0
  161. package/dist/core/view-router.d.ts.map +1 -0
  162. package/dist/core/view-router.js +57 -0
  163. package/dist/core/view-router.js.map +1 -0
  164. package/dist/define/all.d.ts +13 -0
  165. package/dist/define/all.d.ts.map +1 -0
  166. package/dist/define/all.js +14 -0
  167. package/dist/define/all.js.map +1 -0
  168. package/dist/define/contracts.d.ts +2 -0
  169. package/dist/define/contracts.d.ts.map +1 -0
  170. package/dist/define/contracts.js +3 -0
  171. package/dist/define/contracts.js.map +1 -0
  172. package/dist/define/definitions.d.ts +3 -0
  173. package/dist/define/definitions.d.ts.map +1 -0
  174. package/dist/define/definitions.js +4 -0
  175. package/dist/define/definitions.js.map +1 -0
  176. package/dist/define/journal-table.d.ts +2 -0
  177. package/dist/define/journal-table.d.ts.map +1 -0
  178. package/dist/define/journal-table.js +3 -0
  179. package/dist/define/journal-table.js.map +1 -0
  180. package/dist/define/kpis.d.ts +2 -0
  181. package/dist/define/kpis.d.ts.map +1 -0
  182. package/dist/define/kpis.js +3 -0
  183. package/dist/define/kpis.js.map +1 -0
  184. package/dist/define/monitor.d.ts +2 -0
  185. package/dist/define/monitor.d.ts.map +1 -0
  186. package/dist/define/monitor.js +3 -0
  187. package/dist/define/monitor.js.map +1 -0
  188. package/dist/define/overview.d.ts +2 -0
  189. package/dist/define/overview.d.ts.map +1 -0
  190. package/dist/define/overview.js +3 -0
  191. package/dist/define/overview.js.map +1 -0
  192. package/dist/define/pipeline-graph.d.ts +2 -0
  193. package/dist/define/pipeline-graph.d.ts.map +1 -0
  194. package/dist/define/pipeline-graph.js +3 -0
  195. package/dist/define/pipeline-graph.js.map +1 -0
  196. package/dist/define/procs.d.ts +3 -0
  197. package/dist/define/procs.d.ts.map +1 -0
  198. package/dist/define/procs.js +4 -0
  199. package/dist/define/procs.js.map +1 -0
  200. package/dist/define/task-table.d.ts +2 -0
  201. package/dist/define/task-table.d.ts.map +1 -0
  202. package/dist/define/task-table.js +3 -0
  203. package/dist/define/task-table.js.map +1 -0
  204. package/dist/define/task-view.d.ts +2 -0
  205. package/dist/define/task-view.d.ts.map +1 -0
  206. package/dist/define/task-view.js +3 -0
  207. package/dist/define/task-view.js.map +1 -0
  208. package/dist/define/timeline.d.ts +2 -0
  209. package/dist/define/timeline.d.ts.map +1 -0
  210. package/dist/define/timeline.js +3 -0
  211. package/dist/define/timeline.js.map +1 -0
  212. package/dist/define/transcript.d.ts +2 -0
  213. package/dist/define/transcript.d.ts.map +1 -0
  214. package/dist/define/transcript.js +3 -0
  215. package/dist/define/transcript.js.map +1 -0
  216. package/dist/elements/lists/ca-contracts.d.ts +46 -0
  217. package/dist/elements/lists/ca-contracts.d.ts.map +1 -0
  218. package/dist/elements/lists/ca-contracts.js +199 -0
  219. package/dist/elements/lists/ca-contracts.js.map +1 -0
  220. package/dist/elements/lists/ca-definitions.d.ts +41 -0
  221. package/dist/elements/lists/ca-definitions.d.ts.map +1 -0
  222. package/dist/elements/lists/ca-definitions.js +182 -0
  223. package/dist/elements/lists/ca-definitions.js.map +1 -0
  224. package/dist/elements/lists/ca-journal-table.d.ts +37 -0
  225. package/dist/elements/lists/ca-journal-table.d.ts.map +1 -0
  226. package/dist/elements/lists/ca-journal-table.js +170 -0
  227. package/dist/elements/lists/ca-journal-table.js.map +1 -0
  228. package/dist/elements/lists/ca-panel-body.d.ts +42 -0
  229. package/dist/elements/lists/ca-panel-body.d.ts.map +1 -0
  230. package/dist/elements/lists/ca-panel-body.js +210 -0
  231. package/dist/elements/lists/ca-panel-body.js.map +1 -0
  232. package/dist/elements/lists/ca-panel-view.d.ts +21 -0
  233. package/dist/elements/lists/ca-panel-view.d.ts.map +1 -0
  234. package/dist/elements/lists/ca-panel-view.js +59 -0
  235. package/dist/elements/lists/ca-panel-view.js.map +1 -0
  236. package/dist/elements/lists/ca-proc-tree.d.ts +16 -0
  237. package/dist/elements/lists/ca-proc-tree.d.ts.map +1 -0
  238. package/dist/elements/lists/ca-proc-tree.js +63 -0
  239. package/dist/elements/lists/ca-proc-tree.js.map +1 -0
  240. package/dist/elements/lists/ca-procs-view.d.ts +27 -0
  241. package/dist/elements/lists/ca-procs-view.d.ts.map +1 -0
  242. package/dist/elements/lists/ca-procs-view.js +91 -0
  243. package/dist/elements/lists/ca-procs-view.js.map +1 -0
  244. package/dist/elements/lists/ca-task-table.d.ts +33 -0
  245. package/dist/elements/lists/ca-task-table.d.ts.map +1 -0
  246. package/dist/elements/lists/ca-task-table.js +115 -0
  247. package/dist/elements/lists/ca-task-table.js.map +1 -0
  248. package/dist/elements/lists/index.d.ts +9 -0
  249. package/dist/elements/lists/index.d.ts.map +1 -0
  250. package/dist/elements/lists/index.js +9 -0
  251. package/dist/elements/lists/index.js.map +1 -0
  252. package/dist/elements/overview/ca-kpis.d.ts +32 -0
  253. package/dist/elements/overview/ca-kpis.d.ts.map +1 -0
  254. package/dist/elements/overview/ca-kpis.js +62 -0
  255. package/dist/elements/overview/ca-kpis.js.map +1 -0
  256. package/dist/elements/overview/ca-model-usage.d.ts +25 -0
  257. package/dist/elements/overview/ca-model-usage.d.ts.map +1 -0
  258. package/dist/elements/overview/ca-model-usage.js +118 -0
  259. package/dist/elements/overview/ca-model-usage.js.map +1 -0
  260. package/dist/elements/overview/ca-overview.d.ts +67 -0
  261. package/dist/elements/overview/ca-overview.d.ts.map +1 -0
  262. package/dist/elements/overview/ca-overview.js +463 -0
  263. package/dist/elements/overview/ca-overview.js.map +1 -0
  264. package/dist/elements/overview/ca-pipeline-graph.d.ts +211 -0
  265. package/dist/elements/overview/ca-pipeline-graph.d.ts.map +1 -0
  266. package/dist/elements/overview/ca-pipeline-graph.js +616 -0
  267. package/dist/elements/overview/ca-pipeline-graph.js.map +1 -0
  268. package/dist/elements/overview/ca-quota.d.ts +42 -0
  269. package/dist/elements/overview/ca-quota.d.ts.map +1 -0
  270. package/dist/elements/overview/ca-quota.js +179 -0
  271. package/dist/elements/overview/ca-quota.js.map +1 -0
  272. package/dist/elements/overview/ca-run-driver.d.ts +33 -0
  273. package/dist/elements/overview/ca-run-driver.d.ts.map +1 -0
  274. package/dist/elements/overview/ca-run-driver.js +146 -0
  275. package/dist/elements/overview/ca-run-driver.js.map +1 -0
  276. package/dist/elements/overview/ca-services.d.ts +25 -0
  277. package/dist/elements/overview/ca-services.d.ts.map +1 -0
  278. package/dist/elements/overview/ca-services.js +77 -0
  279. package/dist/elements/overview/ca-services.js.map +1 -0
  280. package/dist/elements/overview/ca-spend-breakdown.d.ts +24 -0
  281. package/dist/elements/overview/ca-spend-breakdown.d.ts.map +1 -0
  282. package/dist/elements/overview/ca-spend-breakdown.js +108 -0
  283. package/dist/elements/overview/ca-spend-breakdown.js.map +1 -0
  284. package/dist/elements/overview/ca-timeline.d.ts +28 -0
  285. package/dist/elements/overview/ca-timeline.d.ts.map +1 -0
  286. package/dist/elements/overview/ca-timeline.js +72 -0
  287. package/dist/elements/overview/ca-timeline.js.map +1 -0
  288. package/dist/elements/overview/ca-workers.d.ts +23 -0
  289. package/dist/elements/overview/ca-workers.d.ts.map +1 -0
  290. package/dist/elements/overview/ca-workers.js +86 -0
  291. package/dist/elements/overview/ca-workers.js.map +1 -0
  292. package/dist/elements/overview/index.d.ts +11 -0
  293. package/dist/elements/overview/index.d.ts.map +1 -0
  294. package/dist/elements/overview/index.js +11 -0
  295. package/dist/elements/overview/index.js.map +1 -0
  296. package/dist/elements/overview/pipeline-graph/actions.d.ts +16 -0
  297. package/dist/elements/overview/pipeline-graph/actions.d.ts.map +1 -0
  298. package/dist/elements/overview/pipeline-graph/actions.js +42 -0
  299. package/dist/elements/overview/pipeline-graph/actions.js.map +1 -0
  300. package/dist/elements/overview/pipeline-graph/crumbs.d.ts +15 -0
  301. package/dist/elements/overview/pipeline-graph/crumbs.d.ts.map +1 -0
  302. package/dist/elements/overview/pipeline-graph/crumbs.js +70 -0
  303. package/dist/elements/overview/pipeline-graph/crumbs.js.map +1 -0
  304. package/dist/elements/overview/pipeline-graph/host.d.ts +24 -0
  305. package/dist/elements/overview/pipeline-graph/host.d.ts.map +1 -0
  306. package/dist/elements/overview/pipeline-graph/host.js +2 -0
  307. package/dist/elements/overview/pipeline-graph/host.js.map +1 -0
  308. package/dist/elements/overview/pipeline-graph/inspector.d.ts +5 -0
  309. package/dist/elements/overview/pipeline-graph/inspector.d.ts.map +1 -0
  310. package/dist/elements/overview/pipeline-graph/inspector.js +100 -0
  311. package/dist/elements/overview/pipeline-graph/inspector.js.map +1 -0
  312. package/dist/elements/overview/pipeline-graph/outline.d.ts +53 -0
  313. package/dist/elements/overview/pipeline-graph/outline.d.ts.map +1 -0
  314. package/dist/elements/overview/pipeline-graph/outline.js +111 -0
  315. package/dist/elements/overview/pipeline-graph/outline.js.map +1 -0
  316. package/dist/elements/overview/pipeline-graph/strings.d.ts +11 -0
  317. package/dist/elements/overview/pipeline-graph/strings.d.ts.map +1 -0
  318. package/dist/elements/overview/pipeline-graph/strings.js +49 -0
  319. package/dist/elements/overview/pipeline-graph/strings.js.map +1 -0
  320. package/dist/elements/overview/pipeline-graph/styles.d.ts +4 -0
  321. package/dist/elements/overview/pipeline-graph/styles.d.ts.map +1 -0
  322. package/dist/elements/overview/pipeline-graph/styles.js +96 -0
  323. package/dist/elements/overview/pipeline-graph/styles.js.map +1 -0
  324. package/dist/elements/shared/ca-definition.d.ts +26 -0
  325. package/dist/elements/shared/ca-definition.d.ts.map +1 -0
  326. package/dist/elements/shared/ca-definition.js +202 -0
  327. package/dist/elements/shared/ca-definition.js.map +1 -0
  328. package/dist/elements/shared/contract-parts.d.ts +35 -0
  329. package/dist/elements/shared/contract-parts.d.ts.map +1 -0
  330. package/dist/elements/shared/contract-parts.js +167 -0
  331. package/dist/elements/shared/contract-parts.js.map +1 -0
  332. package/dist/elements/shared/file-card.d.ts +17 -0
  333. package/dist/elements/shared/file-card.d.ts.map +1 -0
  334. package/dist/elements/shared/file-card.js +37 -0
  335. package/dist/elements/shared/file-card.js.map +1 -0
  336. package/dist/elements/shared/prompt-text.d.ts +5 -0
  337. package/dist/elements/shared/prompt-text.d.ts.map +1 -0
  338. package/dist/elements/shared/prompt-text.js +13 -0
  339. package/dist/elements/shared/prompt-text.js.map +1 -0
  340. package/dist/elements/shared/task-chip.d.ts +10 -0
  341. package/dist/elements/shared/task-chip.d.ts.map +1 -0
  342. package/dist/elements/shared/task-chip.js +19 -0
  343. package/dist/elements/shared/task-chip.js.map +1 -0
  344. package/dist/elements/shell/ca-clock.d.ts +13 -0
  345. package/dist/elements/shell/ca-clock.d.ts.map +1 -0
  346. package/dist/elements/shell/ca-clock.js +30 -0
  347. package/dist/elements/shell/ca-clock.js.map +1 -0
  348. package/dist/elements/shell/ca-hosts.d.ts +21 -0
  349. package/dist/elements/shell/ca-hosts.d.ts.map +1 -0
  350. package/dist/elements/shell/ca-hosts.js +97 -0
  351. package/dist/elements/shell/ca-hosts.js.map +1 -0
  352. package/dist/elements/shell/ca-monitor.d.ts +182 -0
  353. package/dist/elements/shell/ca-monitor.d.ts.map +1 -0
  354. package/dist/elements/shell/ca-monitor.js +549 -0
  355. package/dist/elements/shell/ca-monitor.js.map +1 -0
  356. package/dist/elements/shell/ca-run-picker.d.ts +71 -0
  357. package/dist/elements/shell/ca-run-picker.d.ts.map +1 -0
  358. package/dist/elements/shell/ca-run-picker.js +313 -0
  359. package/dist/elements/shell/ca-run-picker.js.map +1 -0
  360. package/dist/elements/shell/ca-theme-switch.d.ts +36 -0
  361. package/dist/elements/shell/ca-theme-switch.d.ts.map +1 -0
  362. package/dist/elements/shell/ca-theme-switch.js +186 -0
  363. package/dist/elements/shell/ca-theme-switch.js.map +1 -0
  364. package/dist/elements/shell/ca-toasts.d.ts +23 -0
  365. package/dist/elements/shell/ca-toasts.d.ts.map +1 -0
  366. package/dist/elements/shell/ca-toasts.js +88 -0
  367. package/dist/elements/shell/ca-toasts.js.map +1 -0
  368. package/dist/elements/shell/header.d.ts +13 -0
  369. package/dist/elements/shell/header.d.ts.map +1 -0
  370. package/dist/elements/shell/header.js +38 -0
  371. package/dist/elements/shell/header.js.map +1 -0
  372. package/dist/elements/shell/styles.d.ts +2 -0
  373. package/dist/elements/shell/styles.d.ts.map +1 -0
  374. package/dist/elements/shell/styles.js +72 -0
  375. package/dist/elements/shell/styles.js.map +1 -0
  376. package/dist/elements/shell/tabs.d.ts +32 -0
  377. package/dist/elements/shell/tabs.d.ts.map +1 -0
  378. package/dist/elements/shell/tabs.js +125 -0
  379. package/dist/elements/shell/tabs.js.map +1 -0
  380. package/dist/elements/shell/views.d.ts +27 -0
  381. package/dist/elements/shell/views.d.ts.map +1 -0
  382. package/dist/elements/shell/views.js +55 -0
  383. package/dist/elements/shell/views.js.map +1 -0
  384. package/dist/elements/task/ca-task-view.d.ts +55 -0
  385. package/dist/elements/task/ca-task-view.d.ts.map +1 -0
  386. package/dist/elements/task/ca-task-view.js +199 -0
  387. package/dist/elements/task/ca-task-view.js.map +1 -0
  388. package/dist/elements/task/ca-transcript.d.ts +74 -0
  389. package/dist/elements/task/ca-transcript.d.ts.map +1 -0
  390. package/dist/elements/task/ca-transcript.js +241 -0
  391. package/dist/elements/task/ca-transcript.js.map +1 -0
  392. package/dist/elements/task/context.d.ts +57 -0
  393. package/dist/elements/task/context.d.ts.map +1 -0
  394. package/dist/elements/task/context.js +61 -0
  395. package/dist/elements/task/context.js.map +1 -0
  396. package/dist/elements/task/header.d.ts +9 -0
  397. package/dist/elements/task/header.d.ts.map +1 -0
  398. package/dist/elements/task/header.js +291 -0
  399. package/dist/elements/task/header.js.map +1 -0
  400. package/dist/elements/task/index.d.ts +3 -0
  401. package/dist/elements/task/index.d.ts.map +1 -0
  402. package/dist/elements/task/index.js +3 -0
  403. package/dist/elements/task/index.js.map +1 -0
  404. package/dist/elements/task/inputs.d.ts +28 -0
  405. package/dist/elements/task/inputs.d.ts.map +1 -0
  406. package/dist/elements/task/inputs.js +27 -0
  407. package/dist/elements/task/inputs.js.map +1 -0
  408. package/dist/elements/task/panes/definition.d.ts +5 -0
  409. package/dist/elements/task/panes/definition.d.ts.map +1 -0
  410. package/dist/elements/task/panes/definition.js +5 -0
  411. package/dist/elements/task/panes/definition.js.map +1 -0
  412. package/dist/elements/task/panes/io.d.ts +8 -0
  413. package/dist/elements/task/panes/io.d.ts.map +1 -0
  414. package/dist/elements/task/panes/io.js +184 -0
  415. package/dist/elements/task/panes/io.js.map +1 -0
  416. package/dist/elements/task/panes/transcript.d.ts +5 -0
  417. package/dist/elements/task/panes/transcript.d.ts.map +1 -0
  418. package/dist/elements/task/panes/transcript.js +29 -0
  419. package/dist/elements/task/panes/transcript.js.map +1 -0
  420. package/dist/elements/task/styles.d.ts +2 -0
  421. package/dist/elements/task/styles.d.ts.map +1 -0
  422. package/dist/elements/task/styles.js +66 -0
  423. package/dist/elements/task/styles.js.map +1 -0
  424. package/dist/elements/trends/ca-trends.d.ts +55 -0
  425. package/dist/elements/trends/ca-trends.d.ts.map +1 -0
  426. package/dist/elements/trends/ca-trends.js +213 -0
  427. package/dist/elements/trends/ca-trends.js.map +1 -0
  428. package/dist/index.d.ts +14 -0
  429. package/dist/index.d.ts.map +1 -0
  430. package/dist/index.js +22 -0
  431. package/dist/index.js.map +1 -0
  432. package/dist/lib/tone.d.ts +29 -0
  433. package/dist/lib/tone.d.ts.map +1 -0
  434. package/dist/lib/tone.js +97 -0
  435. package/dist/lib/tone.js.map +1 -0
  436. package/dist/lib/trends.d.ts +15 -0
  437. package/dist/lib/trends.d.ts.map +1 -0
  438. package/dist/lib/trends.js +36 -0
  439. package/dist/lib/trends.js.map +1 -0
  440. package/dist/locales/codes.d.ts +14 -0
  441. package/dist/locales/codes.d.ts.map +1 -0
  442. package/dist/locales/codes.js +21 -0
  443. package/dist/locales/codes.js.map +1 -0
  444. package/dist/locales/ja.d.ts +785 -0
  445. package/dist/locales/ja.d.ts.map +1 -0
  446. package/dist/locales/ja.js +791 -0
  447. package/dist/locales/ja.js.map +1 -0
  448. package/dist/words/api-error.d.ts +4 -0
  449. package/dist/words/api-error.d.ts.map +1 -0
  450. package/dist/words/api-error.js +13 -0
  451. package/dist/words/api-error.js.map +1 -0
  452. package/dist/words/attempts.d.ts +17 -0
  453. package/dist/words/attempts.d.ts.map +1 -0
  454. package/dist/words/attempts.js +26 -0
  455. package/dist/words/attempts.js.map +1 -0
  456. package/dist/words/causes.d.ts +33 -0
  457. package/dist/words/causes.d.ts.map +1 -0
  458. package/dist/words/causes.js +58 -0
  459. package/dist/words/causes.js.map +1 -0
  460. package/dist/words/changes.d.ts +9 -0
  461. package/dist/words/changes.d.ts.map +1 -0
  462. package/dist/words/changes.js +23 -0
  463. package/dist/words/changes.js.map +1 -0
  464. package/dist/words/claims.d.ts +9 -0
  465. package/dist/words/claims.d.ts.map +1 -0
  466. package/dist/words/claims.js +12 -0
  467. package/dist/words/claims.js.map +1 -0
  468. package/dist/words/context.d.ts +18 -0
  469. package/dist/words/context.d.ts.map +1 -0
  470. package/dist/words/context.js +39 -0
  471. package/dist/words/context.js.map +1 -0
  472. package/dist/words/contract.d.ts +25 -0
  473. package/dist/words/contract.d.ts.map +1 -0
  474. package/dist/words/contract.js +52 -0
  475. package/dist/words/contract.js.map +1 -0
  476. package/dist/words/credential.d.ts +5 -0
  477. package/dist/words/credential.d.ts.map +1 -0
  478. package/dist/words/credential.js +7 -0
  479. package/dist/words/credential.js.map +1 -0
  480. package/dist/words/executor.d.ts +12 -0
  481. package/dist/words/executor.d.ts.map +1 -0
  482. package/dist/words/executor.js +20 -0
  483. package/dist/words/executor.js.map +1 -0
  484. package/dist/words/export.d.ts +8 -0
  485. package/dist/words/export.d.ts.map +1 -0
  486. package/dist/words/export.js +17 -0
  487. package/dist/words/export.js.map +1 -0
  488. package/dist/words/format.d.ts +36 -0
  489. package/dist/words/format.d.ts.map +1 -0
  490. package/dist/words/format.js +109 -0
  491. package/dist/words/format.js.map +1 -0
  492. package/dist/words/hops.d.ts +12 -0
  493. package/dist/words/hops.d.ts.map +1 -0
  494. package/dist/words/hops.js +27 -0
  495. package/dist/words/hops.js.map +1 -0
  496. package/dist/words/hosts.d.ts +18 -0
  497. package/dist/words/hosts.d.ts.map +1 -0
  498. package/dist/words/hosts.js +22 -0
  499. package/dist/words/hosts.js.map +1 -0
  500. package/dist/words/index.d.ts +28 -0
  501. package/dist/words/index.d.ts.map +1 -0
  502. package/dist/words/index.js +32 -0
  503. package/dist/words/index.js.map +1 -0
  504. package/dist/words/models.d.ts +10 -0
  505. package/dist/words/models.d.ts.map +1 -0
  506. package/dist/words/models.js +45 -0
  507. package/dist/words/models.js.map +1 -0
  508. package/dist/words/outcome.d.ts +14 -0
  509. package/dist/words/outcome.d.ts.map +1 -0
  510. package/dist/words/outcome.js +58 -0
  511. package/dist/words/outcome.js.map +1 -0
  512. package/dist/words/panels.d.ts +17 -0
  513. package/dist/words/panels.d.ts.map +1 -0
  514. package/dist/words/panels.js +63 -0
  515. package/dist/words/panels.js.map +1 -0
  516. package/dist/words/passes.d.ts +11 -0
  517. package/dist/words/passes.d.ts.map +1 -0
  518. package/dist/words/passes.js +13 -0
  519. package/dist/words/passes.js.map +1 -0
  520. package/dist/words/preflight.d.ts +28 -0
  521. package/dist/words/preflight.d.ts.map +1 -0
  522. package/dist/words/preflight.js +30 -0
  523. package/dist/words/preflight.js.map +1 -0
  524. package/dist/words/priority.d.ts +5 -0
  525. package/dist/words/priority.d.ts.map +1 -0
  526. package/dist/words/priority.js +7 -0
  527. package/dist/words/priority.js.map +1 -0
  528. package/dist/words/prompt.d.ts +10 -0
  529. package/dist/words/prompt.d.ts.map +1 -0
  530. package/dist/words/prompt.js +17 -0
  531. package/dist/words/prompt.js.map +1 -0
  532. package/dist/words/quota.d.ts +35 -0
  533. package/dist/words/quota.d.ts.map +1 -0
  534. package/dist/words/quota.js +102 -0
  535. package/dist/words/quota.js.map +1 -0
  536. package/dist/words/rests.d.ts +26 -0
  537. package/dist/words/rests.d.ts.map +1 -0
  538. package/dist/words/rests.js +77 -0
  539. package/dist/words/rests.js.map +1 -0
  540. package/dist/words/rounds.d.ts +14 -0
  541. package/dist/words/rounds.d.ts.map +1 -0
  542. package/dist/words/rounds.js +60 -0
  543. package/dist/words/rounds.js.map +1 -0
  544. package/dist/words/row-extras.d.ts +7 -0
  545. package/dist/words/row-extras.d.ts.map +1 -0
  546. package/dist/words/row-extras.js +26 -0
  547. package/dist/words/row-extras.js.map +1 -0
  548. package/dist/words/run-line.d.ts +40 -0
  549. package/dist/words/run-line.d.ts.map +1 -0
  550. package/dist/words/run-line.js +66 -0
  551. package/dist/words/run-line.js.map +1 -0
  552. package/dist/words/services.d.ts +16 -0
  553. package/dist/words/services.d.ts.map +1 -0
  554. package/dist/words/services.js +45 -0
  555. package/dist/words/services.js.map +1 -0
  556. package/dist/words/stop.d.ts +6 -0
  557. package/dist/words/stop.d.ts.map +1 -0
  558. package/dist/words/stop.js +69 -0
  559. package/dist/words/stop.js.map +1 -0
  560. package/dist/words/table.d.ts +4 -0
  561. package/dist/words/table.d.ts.map +1 -0
  562. package/dist/words/table.js +8 -0
  563. package/dist/words/table.js.map +1 -0
  564. package/dist/words/task-definition.d.ts +23 -0
  565. package/dist/words/task-definition.d.ts.map +1 -0
  566. package/dist/words/task-definition.js +27 -0
  567. package/dist/words/task-definition.js.map +1 -0
  568. package/dist/words/time-box.d.ts +8 -0
  569. package/dist/words/time-box.d.ts.map +1 -0
  570. package/dist/words/time-box.js +12 -0
  571. package/dist/words/time-box.js.map +1 -0
  572. package/dist/words/trends.d.ts +86 -0
  573. package/dist/words/trends.d.ts.map +1 -0
  574. package/dist/words/trends.js +104 -0
  575. package/dist/words/trends.js.map +1 -0
  576. package/docs/embed.md +121 -0
  577. package/docs/events.md +38 -0
  578. package/docs/examples/embed.html +31 -0
  579. package/docs/examples/journal.ts +32 -0
  580. package/docs/examples/live-transcript.ts +22 -0
  581. package/docs/examples/vite/index.html +30 -0
  582. package/docs/examples/vite/main.ts +23 -0
  583. package/docs/languages.md +48 -0
  584. package/docs/live-data.md +17 -0
  585. package/docs/theming.md +21 -0
  586. package/docs/tsconfig.json +14 -0
  587. package/package.json +131 -4
  588. package/src/adapters/check-rows.ts +81 -0
  589. package/src/adapters/filters.ts +76 -0
  590. package/src/adapters/graph/compound.ts +359 -0
  591. package/src/adapters/graph/flow-index.ts +154 -0
  592. package/src/adapters/graph/highlight.ts +40 -0
  593. package/src/adapters/graph/input.ts +236 -0
  594. package/src/adapters/graph/layer.ts +92 -0
  595. package/src/adapters/graph/matrix.ts +133 -0
  596. package/src/adapters/graph/plans.fixture.ts +194 -0
  597. package/src/adapters/graph/project.ts +358 -0
  598. package/src/adapters/graph/selection.ts +54 -0
  599. package/src/adapters/graph/states.ts +10 -0
  600. package/src/adapters/graph/types.ts +148 -0
  601. package/src/adapters/graph/words.ts +146 -0
  602. package/src/adapters/index.ts +22 -0
  603. package/src/adapters/journal-columns.ts +200 -0
  604. package/src/adapters/kpi-tiles.ts +211 -0
  605. package/src/adapters/lanes.ts +98 -0
  606. package/src/adapters/model-shares.ts +62 -0
  607. package/src/adapters/panel-body.ts +112 -0
  608. package/src/adapters/preflight.ts +27 -0
  609. package/src/adapters/task-columns.ts +120 -0
  610. package/src/adapters/transcript/index.ts +14 -0
  611. package/src/adapters/transcript/model.ts +156 -0
  612. package/src/adapters/transcript/rounds.ts +86 -0
  613. package/src/adapters/transcript/sections.ts +82 -0
  614. package/src/adapters/transcript/web.ts +40 -0
  615. package/src/adapters/transcript/who.ts +53 -0
  616. package/src/adapters/trends.ts +337 -0
  617. package/src/controllers/locale.ts +47 -0
  618. package/src/controllers/shortcuts.ts +69 -0
  619. package/src/controllers/stream.ts +103 -0
  620. package/src/controllers/task-detail.ts +54 -0
  621. package/src/controllers/theme.ts +73 -0
  622. package/src/core/events.ts +120 -0
  623. package/src/core/i18n.ts +76 -0
  624. package/src/core/index.ts +6 -0
  625. package/src/core/memory.ts +177 -0
  626. package/src/core/scroll.ts +73 -0
  627. package/src/core/view-route.ts +177 -0
  628. package/src/core/view-router.ts +66 -0
  629. package/src/define/all.ts +13 -0
  630. package/src/define/contracts.ts +2 -0
  631. package/src/define/definitions.ts +3 -0
  632. package/src/define/journal-table.ts +2 -0
  633. package/src/define/kpis.ts +2 -0
  634. package/src/define/monitor.ts +2 -0
  635. package/src/define/overview.ts +2 -0
  636. package/src/define/pipeline-graph.ts +2 -0
  637. package/src/define/procs.ts +3 -0
  638. package/src/define/task-table.ts +2 -0
  639. package/src/define/task-view.ts +2 -0
  640. package/src/define/timeline.ts +2 -0
  641. package/src/define/transcript.ts +2 -0
  642. package/src/elements/lists/ca-contracts.ts +204 -0
  643. package/src/elements/lists/ca-definitions.ts +170 -0
  644. package/src/elements/lists/ca-journal-table.ts +141 -0
  645. package/src/elements/lists/ca-panel-body.ts +200 -0
  646. package/src/elements/lists/ca-panel-view.ts +50 -0
  647. package/src/elements/lists/ca-proc-tree.ts +57 -0
  648. package/src/elements/lists/ca-procs-view.ts +89 -0
  649. package/src/elements/lists/ca-task-table.ts +94 -0
  650. package/src/elements/lists/index.ts +8 -0
  651. package/src/elements/overview/ca-kpis.ts +51 -0
  652. package/src/elements/overview/ca-model-usage.ts +113 -0
  653. package/src/elements/overview/ca-overview.ts +499 -0
  654. package/src/elements/overview/ca-pipeline-graph.ts +617 -0
  655. package/src/elements/overview/ca-quota.ts +164 -0
  656. package/src/elements/overview/ca-run-driver.ts +140 -0
  657. package/src/elements/overview/ca-services.ts +66 -0
  658. package/src/elements/overview/ca-spend-breakdown.ts +107 -0
  659. package/src/elements/overview/ca-timeline.ts +57 -0
  660. package/src/elements/overview/ca-workers.ts +82 -0
  661. package/src/elements/overview/index.ts +10 -0
  662. package/src/elements/overview/pipeline-graph/actions.ts +45 -0
  663. package/src/elements/overview/pipeline-graph/crumbs.ts +75 -0
  664. package/src/elements/overview/pipeline-graph/host.ts +26 -0
  665. package/src/elements/overview/pipeline-graph/inspector.ts +104 -0
  666. package/src/elements/overview/pipeline-graph/outline.ts +150 -0
  667. package/src/elements/overview/pipeline-graph/strings.ts +53 -0
  668. package/src/elements/overview/pipeline-graph/styles.ts +97 -0
  669. package/src/elements/shared/ca-definition.ts +206 -0
  670. package/src/elements/shared/contract-parts.ts +174 -0
  671. package/src/elements/shared/file-card.ts +49 -0
  672. package/src/elements/shared/prompt-text.ts +13 -0
  673. package/src/elements/shared/task-chip.ts +18 -0
  674. package/src/elements/shell/ca-clock.ts +27 -0
  675. package/src/elements/shell/ca-hosts.ts +93 -0
  676. package/src/elements/shell/ca-monitor.ts +528 -0
  677. package/src/elements/shell/ca-run-picker.ts +284 -0
  678. package/src/elements/shell/ca-theme-switch.ts +170 -0
  679. package/src/elements/shell/ca-toasts.ts +100 -0
  680. package/src/elements/shell/header.ts +45 -0
  681. package/src/elements/shell/styles.ts +72 -0
  682. package/src/elements/shell/tabs.ts +143 -0
  683. package/src/elements/shell/views.ts +67 -0
  684. package/src/elements/task/ca-task-view.ts +157 -0
  685. package/src/elements/task/ca-transcript.ts +214 -0
  686. package/src/elements/task/context.ts +105 -0
  687. package/src/elements/task/header.ts +296 -0
  688. package/src/elements/task/index.ts +2 -0
  689. package/src/elements/task/inputs.ts +46 -0
  690. package/src/elements/task/panes/definition.ts +7 -0
  691. package/src/elements/task/panes/io.ts +190 -0
  692. package/src/elements/task/panes/transcript.ts +29 -0
  693. package/src/elements/task/styles.ts +66 -0
  694. package/src/elements/trends/ca-trends.ts +204 -0
  695. package/src/index.ts +23 -0
  696. package/src/lib/tone.ts +109 -0
  697. package/src/lib/trends.ts +44 -0
  698. package/src/locales/codes.ts +23 -0
  699. package/src/locales/ja.ts +795 -0
  700. package/src/words/api-error.ts +17 -0
  701. package/src/words/attempts.ts +28 -0
  702. package/src/words/causes.ts +67 -0
  703. package/src/words/changes.ts +29 -0
  704. package/src/words/claims.ts +16 -0
  705. package/src/words/context.ts +47 -0
  706. package/src/words/contract.ts +63 -0
  707. package/src/words/credential.ts +8 -0
  708. package/src/words/executor.ts +22 -0
  709. package/src/words/export.ts +22 -0
  710. package/src/words/format.ts +107 -0
  711. package/src/words/hops.ts +30 -0
  712. package/src/words/hosts.ts +37 -0
  713. package/src/words/index.ts +31 -0
  714. package/src/words/models.ts +50 -0
  715. package/src/words/outcome.ts +61 -0
  716. package/src/words/panels.ts +71 -0
  717. package/src/words/passes.ts +18 -0
  718. package/src/words/preflight.ts +53 -0
  719. package/src/words/priority.ts +8 -0
  720. package/src/words/prompt.ts +20 -0
  721. package/src/words/quota.ts +108 -0
  722. package/src/words/rests.ts +96 -0
  723. package/src/words/rounds.ts +56 -0
  724. package/src/words/row-extras.ts +24 -0
  725. package/src/words/run-line.ts +77 -0
  726. package/src/words/services.ts +57 -0
  727. package/src/words/stop.ts +65 -0
  728. package/src/words/table.ts +10 -0
  729. package/src/words/task-definition.ts +37 -0
  730. package/src/words/time-box.ts +21 -0
  731. package/src/words/trends.ts +118 -0
@@ -0,0 +1,499 @@
1
+ import {
2
+ deriveRun,
3
+ isPython,
4
+ isRunLive,
5
+ isRunPanel,
6
+ typedBody,
7
+ type TypedPanelBody,
8
+ liveActivities,
9
+ progress,
10
+ result,
11
+ runAccounts,
12
+ runRelative,
13
+ spendOf,
14
+ type ContractRecord,
15
+ type ContractSpec,
16
+ type Info,
17
+ type OutputTally,
18
+ type RunState,
19
+ type HostSummary,
20
+ type RunSummary,
21
+ type TaskOutcome,
22
+ } from '@contraagent/api';
23
+ import { localized, msg, str } from '@lit/localize';
24
+ import { LitElement, css, html, nothing } from 'lit';
25
+ import { customElement, property } from 'lit/decorators.js';
26
+ import { repeat } from 'lit/directives/repeat.js';
27
+ import { emit } from '../../core/events.js';
28
+ import { facts, kindUnit, localTime, sentence } from '../../words/format.js';
29
+ import { notStartedCause, outcomeLabel, stateCount, stopLabel } from '../../words/index.js';
30
+ import { base } from '@contraagent/elements/styles';
31
+ import { pill, statusWord } from '@contraagent/elements/primitives';
32
+ import { contractTone, outcomeTone } from '../../lib/tone.js';
33
+ import { contractChip, formatOf } from '../shared/contract-parts.js';
34
+ import { contractStatusLabel, contractStatusWhy } from '../../words/contract.js';
35
+ import { taskChip } from '../shared/task-chip.js';
36
+ import '../lists/ca-proc-tree.js';
37
+ import './ca-kpis.js';
38
+ import './ca-spend-breakdown.js';
39
+ import './ca-model-usage.js';
40
+ import './ca-quota.js';
41
+ import './ca-services.js';
42
+ import './ca-pipeline-graph.js';
43
+ import './ca-run-driver.js';
44
+ import './ca-timeline.js';
45
+ import './ca-workers.js';
46
+
47
+ /** Failed outputs listed on the overview; the rest are behind a link to the outputs tab. */
48
+ const OUTPUTS_SHOWN = 5;
49
+
50
+ const CT_ORDER = ['invalid', 'refused', 'failed', 'running', 'pending', 'valid'] as const satisfies readonly (keyof OutputTally)[];
51
+
52
+ /** A typed body in one line: its title, else its first tile's label and value; '' when it has neither. */
53
+ function typedPeek(b: TypedPanelBody): string {
54
+ if (b.title) return b.title;
55
+ if (b.type === 'tiles') {
56
+ const t = b.tiles[0];
57
+ return t ? `${t.label}: ${String(t.value)}` : '';
58
+ }
59
+ if (b.type === 'blocks') {
60
+ for (const block of b.blocks) {
61
+ const inner = typedBody(block);
62
+ const line = inner ? typedPeek(inner) : '';
63
+ if (line) return line;
64
+ }
65
+ }
66
+ return '';
67
+ }
68
+
69
+ /** A one-line peek at a panel's body: a typed body by what it says, any other object by its keys. */
70
+ function peek(v: unknown): string {
71
+ if (v === undefined) return msg('Loading…');
72
+ const typed = typedBody(v);
73
+ if (typed) return typedPeek(typed);
74
+ if (v === null || typeof v !== 'object') return JSON.stringify(v);
75
+ const keys = Object.keys(v);
76
+ if (!keys.length) return msg('none', { id: 'none', desc: 'An empty value' });
77
+ const names = `${keys.slice(0, 4).join(', ')}${keys.length > 4 ? ', …' : ''}`;
78
+ return Array.isArray(v) ? msg(str`${keys.length} items: ${names}`) : msg(str`${keys.length} keys: ${names}`);
79
+ }
80
+
81
+ /**
82
+ * The run on one page, in the order a reader checks it: whether it runs, what runs
83
+ * now, the tasks with a problem (causes first) and the outputs; the pipeline graph
84
+ * (every task, by layer of the flow) and the figures; where the tokens, the cost and
85
+ * the subscription went, the process tree (while running), the resume cursor and the
86
+ * pipeline's own panels; then a timeline. A card takes the width its content needs.
87
+ * Sends `ca-open-task` and `ca-navigate`.
88
+ *
89
+ * @fires ca-navigate - `{tab, stop?}`: a link to another tab or a panel; `{layer, unit, sel}`: a layer of the pipeline graph, or what is selected in it
90
+ * @fires ca-open-task - `{key, view?}`: a task with a problem, or the task that started a service, was clicked
91
+ */
92
+ @customElement('ca-overview')
93
+ @localized()
94
+ export class CaOverview extends LitElement {
95
+ static override styles = [
96
+ base,
97
+ css`
98
+ /* The overview is a column of bands. A band's cards take the width their content
99
+ needs: the state of the run (with the running tasks while none runs), the
100
+ problems and the outputs share a row; the breakdowns share two columns; only
101
+ what is wide by nature (the running tasks' cards, the pipeline graph, the
102
+ totals' tiles, the timeline) runs the whole width. */
103
+ :host { display: block; container-type: inline-size; }
104
+ .ov { display: flex; flex-direction: column; gap: 14px; }
105
+ /* the cards of a row share its height: no card ends above its neighbours */
106
+ .band.status { display: grid; gap: 14px; align-items: stretch; }
107
+ .stack { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
108
+ .stack > .panel:first-child { flex: 1; }
109
+ /* the breakdowns pair up, two to a row of one height; one alone (the last of an odd
110
+ count, or the only one) takes the whole row */
111
+ .band.parts { display: grid; gap: 14px; align-items: stretch;
112
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, max(440px, calc((100% - 14px) / 2))), 1fr)); }
113
+ @container (min-width: 894px) {
114
+ .band.parts > .panel:last-child:nth-child(odd) { grid-column: 1 / -1; }
115
+ }
116
+ .stack { grid-area: stack; }
117
+ .problems { grid-area: problems; }
118
+ .outputs { grid-area: outputs; }
119
+ .row { grid-area: running; }
120
+ .band.status { grid-template-areas: 'stack' 'problems' 'outputs' 'running'; }
121
+ @container (min-width: 760px) {
122
+ .band.status { grid-template-columns: minmax(240px, 1fr) minmax(0, 1.4fr); grid-template-areas: 'stack problems' 'outputs outputs' 'running running'; }
123
+ }
124
+ @container (min-width: 1100px) {
125
+ .band.status { grid-template-columns: minmax(240px, 1fr) minmax(0, 1.3fr) minmax(0, 1.3fr); grid-template-areas: 'stack problems outputs' 'running running running'; }
126
+ }
127
+ .ok { display: flex; align-items: baseline; gap: 6px; color: var(--text-2); }
128
+ .ok span[aria-hidden] { color: var(--status-done); }
129
+ /* a failed output: its status and its task on one line, what it is and where under them */
130
+ .ofl { grid-template-columns: max-content minmax(0, 1fr); }
131
+ .ofl > .jstop { white-space: nowrap; }
132
+ .ofl > b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
133
+ .ofl > .meta { grid-column: 1 / -1; overflow: hidden; text-overflow: ellipsis; }
134
+ .ct-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
135
+ .pcards { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(320px, 100%), 1fr)); gap: 12px; }
136
+ .pcard { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 12px; align-items: start; padding: 12px 14px; border-radius: 10px;
137
+ background: var(--raise); border: 1px solid var(--line); cursor: pointer; transition: border-color 0.15s, transform 0.15s;
138
+ text-align: left; color: inherit; font: inherit; width: 100%; min-width: 0; }
139
+ .pcard > div { min-width: 0; }
140
+ .pcard .meta { overflow-wrap: anywhere; }
141
+ .pcard:hover { border-color: var(--accent); transform: translateY(-1px); }
142
+ .pc-ic { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 9px; background: var(--well); color: var(--text-2); font-size: 16px; }
143
+ .pc-peek { font-family: var(--mono); font-size: 11.5px; color: var(--text-2); margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
144
+ .pc-go { grid-column: 2; color: var(--accent); font-size: 12px; opacity: 0.8; margin-top: 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
145
+ .pcard:hover .pc-go { opacity: 1; }
146
+ .cur-units { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 8px 14px; }
147
+ .cu { display: grid; grid-template-columns: 90px 1fr 70px auto; gap: 8px; align-items: center; }
148
+ .cu-bar { height: 5px; border-radius: 3px; background: var(--track); overflow: hidden; }
149
+ .cu-bar i { display: block; height: 100%; background: var(--meter); }
150
+ .fl > div.meta { grid-column: 1 / 4; overflow: hidden; text-overflow: ellipsis; }
151
+ .stopped { grid-column: 1 / 4; color: var(--text-muted); font-size: 11px; display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
152
+ .fl.muted { opacity: 0.7; }
153
+ .problems h4.sub { margin: 10px 0 2px; font-size: 11px; font-weight: 600; color: var(--text-muted); display: flex; }
154
+ .problems h4.sub .r { margin-left: auto; font-weight: 400; }
155
+ .next { margin: 10px 2px 2px; font-size: 12px; color: var(--text-2); }
156
+ .next code { font-family: var(--mono); }
157
+ .more { font-size: 12px; margin: 6px 10px 0; }
158
+ `,
159
+ ];
160
+
161
+ @property({ attribute: false }) state!: RunState;
162
+ @property({ attribute: false }) summary: RunSummary | undefined;
163
+ /** The run's host (a hub). */
164
+ @property({ attribute: false }) host: HostSummary | undefined;
165
+ @property({ attribute: false }) info!: Info;
166
+ @property() run = '';
167
+ /** The pipeline graph's layer (`ViewRoute.layer`). */
168
+ @property() layer = '';
169
+ /** The unit highlighted in the pipeline graph (`ViewRoute.unit`). */
170
+ @property() unit = '';
171
+ /** What is selected in the pipeline graph (`ViewRoute.sel`). */
172
+ @property() sel = '';
173
+
174
+ private go(tab: 'outputs' | 'procs' | `panel:${string}`): void {
175
+ emit(this, 'ca-navigate', { tab });
176
+ }
177
+
178
+ /** Open a task: a Python task has no transcript, so its output. */
179
+ private open(t: { key: string; executor?: string }): void {
180
+ emit(this, 'ca-open-task', { key: t.key, ...(isPython(t) ? { view: 'output' as const } : {}) });
181
+ }
182
+
183
+ override render() {
184
+ const s = this.state;
185
+ const live = isRunLive(s, this.summary);
186
+ const busy = live ? liveActivities(s.procs).length : 0;
187
+ /** The run's limit (`run.json` `max_workers`); null when the run did not record one. */
188
+ const max = s.procs?.max_workers || null;
189
+ // A run's own views: a trends panel is computed over a period, not for this run (the Trends page).
190
+ const panels = this.info.panels.filter(isRunPanel);
191
+ // Running tasks need the width of their cards; while none runs, one line under the run's state.
192
+ // A run that is over runs nothing: its state says so.
193
+ const running = live && busy > 0;
194
+ return html`<div class="ov">
195
+ <div class="band status">
196
+ <div class="stack">
197
+ <section class="panel enter">
198
+ <h3>${msg('Run')}</h3>
199
+ <ca-run-driver .procs=${s.procs} .summary=${this.summary} .plan=${s.plan} .host=${this.host}></ca-run-driver>
200
+ </section>
201
+ ${live && !running ? this.runningCard(live, busy, max) : nothing}
202
+ </div>
203
+ <section class="panel enter problems">
204
+ <h3>${msg('Problems')}
205
+ <span class="r"><a class="lnk" href="#" @click=${(e: Event) => this.nav(e, () => emit(this, 'ca-navigate', { tab: 'journal', stop: 'bad' }))}>${msg('Failed attempts in history')}</a></span></h3>
206
+ ${this.problems(live)}
207
+ </section>
208
+ <section class="panel enter outputs">
209
+ <h3 title=${msg('Checked files (OutputContract, InputContract)')}>${msg('Outputs')}
210
+ <span class="r"><a class="lnk" href="#" @click=${(e: Event) => this.nav(e, () => this.go('outputs'))}>${msg('All outputs')}</a></span></h3>
211
+ ${this.outputs()}
212
+ </section>
213
+ ${running ? html`<div class="row">${this.runningCard(live, busy, max)}</div>` : nothing}
214
+ </div>
215
+ <section class="panel enter">
216
+ <h3 title=${msg('Every task the run scheduled, by kind (plan.jsonl)')}>${msg('Pipeline')}
217
+ <span class="r">${this.progressLine(live)}</span></h3>
218
+ <ca-pipeline-graph .plan=${s.plan} .journal=${s.journal} .run=${this.run} .layer=${this.layer} .unit=${this.unit} .sel=${this.sel} ?live=${live}></ca-pipeline-graph>
219
+ </section>
220
+ <section class="panel enter">
221
+ <h3 title=${msg('Counted from every finished attempt (journal.jsonl)')}>${msg('Totals')}</h3>
222
+ <ca-kpis .journal=${s.journal} .plan=${s.plan}></ca-kpis>
223
+ </section>
224
+ <div class="band parts">
225
+ ${live
226
+ ? html`<section class="panel enter">
227
+ <h3>${msg('Process tree')}
228
+ <span class="r"><a class="lnk" href="#" @click=${(e: Event) => this.nav(e, () => this.go('procs'))}>${msg('All processes')}</a></span></h3>
229
+ <ca-proc-tree .procs=${s.procs}></ca-proc-tree>
230
+ </section>`
231
+ : nothing}
232
+ ${spendOf(s.journal)
233
+ ? html`<section class="panel enter">
234
+ <h3 title=${msg('Reported by the coding agents')}>${msg('Tokens and cost by kind')}</h3>
235
+ <ca-spend-breakdown .journal=${s.journal}></ca-spend-breakdown>
236
+ </section>`
237
+ : nothing}
238
+ ${s.plan.models?.length
239
+ ? html`<section class="panel enter">
240
+ <h3 title=${msg('What the agent sessions spent on each model, each model of a model switch counted separately (Plan.models)')}>${msg('Models')}
241
+ <span class="r">${s.plan.models.length === 1 ? msg('1 model') : msg(str`${s.plan.models.length} models`)}</span></h3>
242
+ <ca-model-usage .models=${s.plan.models}></ca-model-usage>
243
+ </section>`
244
+ : nothing}
245
+ ${runAccounts(s.journal).length || s.plan.rests?.length
246
+ ? html`<section class="panel enter">
247
+ <h3 title=${msg('Account-wide | read at each agent session start')}>
248
+ ${msg('Subscription usage')}<span class="r">${msg('Per account, first → last reading')}</span></h3>
249
+ <ca-quota .journal=${s.journal} .caps=${s.plan.quota_caps ?? []} .rests=${s.plan.rests ?? []} .rule=${s.plan.quota_rule ?? ''} ?live=${live}></ca-quota>
250
+ </section>`
251
+ : nothing}
252
+ ${s.plan.services?.length
253
+ ? html`<section class="panel enter">
254
+ <h3 title=${msg('A long-lived helper that the tasks holding one lock share (services.jsonl)')}>${msg('Services')}</h3>
255
+ <ca-services .services=${s.plan.services} .nodes=${s.plan.nodes} ?live=${live}></ca-services>
256
+ </section>`
257
+ : nothing}
258
+ ${s.cursor
259
+ ? html`<section class="panel enter">
260
+ <h3 title=${msg('Stage and step per unit (CursorStore)')}>${msg('Resume cursor')}</h3>
261
+ ${this.cursor()}
262
+ </section>`
263
+ : nothing}
264
+ </div>
265
+ ${panels.length
266
+ ? html`<section class="panel enter views">
267
+ <h3 title=${msg('monitor.Panel')}>${msg('Custom views')}</h3>
268
+ ${this.panelCards(panels)}
269
+ </section>`
270
+ : nothing}
271
+ <section class="panel enter">
272
+ <h3>${msg('Timeline')}
273
+ <span class="r">${this.triesLine()}</span></h3>
274
+ <ca-timeline .journal=${s.journal} .plan=${s.plan} .procs=${s.procs} .live=${live} .run=${this.run}></ca-timeline>
275
+ </section>
276
+ </div>`;
277
+ }
278
+
279
+ private runningCard(live: boolean, busy: number, max: number | null) {
280
+ return html`<section class="panel enter">
281
+ <h3 title=${msg('Limit: max_concurrent')}>${msg('Running tasks')}
282
+ ${live ? html`<span class="r">${max ? msg(str`${busy} of ${max} running at once`) : msg(str`${busy} running at once`)}</span>` : nothing}</h3>
283
+ ${busy ? html`<ca-workers .procs=${this.state.procs} .live=${live}></ca-workers>` : html`<div class="meta">${msg('No tasks running')}</div>`}
284
+ </section>`;
285
+ }
286
+
287
+ // ---- contracts: the files tasks must leave behind (OutputContract) and read (InputContract) ----
288
+ private outputs() {
289
+ const { contracts, tally } = this.state.outputs;
290
+ if (!contracts.length) {
291
+ return html`<div class="meta">${msg('No output files')}</div>`;
292
+ }
293
+ const chips = CT_ORDER.filter((k) => tally[k]);
294
+ // Only what went wrong with a file; tasks that never started are the problems section's.
295
+ const bad = contracts
296
+ .flatMap((c) => (c.outputs ?? []).map((o): [ContractRecord, ContractSpec] => [c, o]))
297
+ .filter(([, o]) => o.status === 'invalid' || o.status === 'failed');
298
+ const shown = bad.slice(0, OUTPUTS_SHOWN);
299
+ const refused = tally.refused;
300
+ return html`<div class="ct-row">
301
+ ${chips.length
302
+ ? chips.map((k) => contractChip(k, tally[k]))
303
+ : html`<span class="meta">${msg('No checked files')}</span>`}
304
+ </div>
305
+ ${shown.map(
306
+ ([c, o]) => html`<button type="button" class="fl ofl" @click=${() => this.go('outputs')}>
307
+ ${statusWord({ text: o.status ? contractStatusLabel(o.status) : '—', tone: contractTone(o.status), title: o.status ? contractStatusWhy(o.status) : null })}
308
+ <b class="jmono" title=${c.key}>${kindUnit({ kind: c.kind, unit: c.unit === c.key ? '' : c.unit })}</b>
309
+ <span class="meta">${formatOf(o)}</span>
310
+ <span class="meta">${runRelative(o.errors?.[0] || o.path, this.run).slice(0, 160)}</span>
311
+ </button>`,
312
+ )}
313
+ ${bad.length > shown.length
314
+ ? html`<div class="more"><a class="lnk" href="#" @click=${(e: Event) => this.nav(e, () => this.go('outputs'))}>${bad.length - shown.length === 1
315
+ ? msg('1 more output')
316
+ : msg(str`${bad.length - shown.length} more outputs`)}</a></div>`
317
+ : nothing}
318
+ ${refused
319
+ ? html`<div class="meta more">${refused === 1
320
+ ? msg('1 output not written (task not started)')
321
+ : msg(str`${refused} outputs not written (tasks not started)`)}</div>`
322
+ : nothing}`;
323
+ }
324
+
325
+ /** While running, how far the run is; once over, how its tasks ended. */
326
+ private progressLine(live: boolean): string {
327
+ const plan = this.state.plan;
328
+ const r = result(plan);
329
+ if (live || r.left) {
330
+ const p = progress(plan);
331
+ return facts(msg(str`${p.pct}%`), msg(str`${p.done} of ${p.total} tasks done`), p.partial ? stateCount('partial', p.partial) : '', p.skipped ? stateCount('skipped', p.skipped) : '');
332
+ }
333
+ return facts(
334
+ stateCount('done', r.done),
335
+ r.skipped ? stateCount('skipped', r.skipped) : '',
336
+ r.failed ? stateCount('failed', r.failed) : '',
337
+ r.notStarted ? stateCount('not_started', r.notStarted) : '',
338
+ r.partial ? stateCount('partial', r.partial) : '',
339
+ );
340
+ }
341
+
342
+ /** "23 attempts | 4 not started": a task that never started has no attempt. */
343
+ private triesLine(): string {
344
+ const { tries, notStarted } = deriveRun(this.state.journal, this.state.plan).tries;
345
+ return facts(tries === 1 ? msg('1 attempt') : msg(str`${tries} attempts`), notStarted ? stateCount('not_started', notStarted) : '');
346
+ }
347
+
348
+ /** A link's click: no navigation of the page's own, then `go`. */
349
+ private nav(e: Event, go: () => void): void {
350
+ e.preventDefault();
351
+ go();
352
+ }
353
+
354
+ // The run's own position, from its CursorStore: the stage it is in, the stages behind it,
355
+ // and how far each unit has got. Shown only for a run that keeps a cursor (Run.cursor()).
356
+ private cursor() {
357
+ const c = this.state.cursor;
358
+ const units = Object.entries(c?.units ?? {});
359
+ if (!c || (!c.stage && !units.length)) return html`<div class="meta">${msg('No resume cursor')}</div>`;
360
+ const done = c.completed_stages ?? [];
361
+ return html`<div class="chips" style="margin-bottom:10px">
362
+ ${done.length || c.stage
363
+ ? html`${done.map((n) => html`<span class="chip" data-tone="done"><span aria-hidden="true">✓</span><span class="sr">${msg('done', { id: 'stage-done', desc: 'A stage of the resume cursor that is complete' })}</span> ${n}</span>`)}${c.stage
364
+ ? html`<span class="chip" data-tone="running"><span class="sr">${msg('current')}</span>${c.stage}</span>`
365
+ : nothing}`
366
+ : html`<span class="meta">${msg('No stage')}</span>`}
367
+ </div>
368
+ ${units.length
369
+ ? html`<div class="cur-units">
370
+ ${units.map(
371
+ ([u, x]) => html`<div class="cu">
372
+ <span class="jmono">${u}</span>
373
+ <span class="meta">${facts(x.step || '—', x.loop_pass ? msg(str`pass ${x.loop_pass}`) : '')}</span>
374
+ <span class="cu-bar" title=${x.completed.length === 1 ? msg('1 step done') : msg(str`${x.completed.length} steps done`)}><i style="width:${Math.min(100, 12 * (x.completed.length + 1))}%"></i></span>
375
+ ${x.inflight.length ? pill({ text: msg('running'), tone: 'running', title: x.inflight.join('\n') }) : nothing}
376
+ </div>`,
377
+ )}
378
+ </div>`
379
+ : nothing}`;
380
+ }
381
+
382
+ // One card per view the pipeline added: what it is, a one-line peek, and where to open it.
383
+ private panelCards(panels: Info['panels']) {
384
+ return html`<div class="pcards">
385
+ ${repeat(
386
+ panels,
387
+ (p) => p.name,
388
+ (p) => {
389
+ const line = peek(this.state.panels[p.name]);
390
+ return html`<button type="button" class="pcard" @click=${() => this.go(`panel:${p.name}`)}>
391
+ <span class="pc-ic" aria-hidden="true">${p.icon || '▤'}</span>
392
+ <div>
393
+ <b>${p.title || p.name}</b>
394
+ ${p.description ? html`<div class="meta">${p.description}</div>` : nothing}
395
+ ${line ? html`<div class="pc-peek">${line}</div>` : nothing}
396
+ </div>
397
+ <span class="pc-go">${msg('Show view')}</span>
398
+ </button>`;
399
+ },
400
+ )}
401
+ </div>`;
402
+ }
403
+
404
+ /** A task's name as the button that opens it: the keyboard's way into a problem row. */
405
+ private nameButton(t: TaskOutcome) {
406
+ return html`<button type="button" class="fl-name jmono" title=${t.key} @click=${() => this.open(t)}>${this.name(t)}</button>`;
407
+ }
408
+
409
+ /** A click on a problem row opens its task, except on a button in it (its name, a later task's chip), which acts on its own. */
410
+ private openRow(e: MouseEvent, t: TaskOutcome): void {
411
+ if (!(e.target as Element).closest('button')) this.open(t);
412
+ }
413
+
414
+ /** One task by name: kind · unit, or kind alone for a task of the whole run. */
415
+ private name(t: TaskOutcome): string {
416
+ return kindUnit(t);
417
+ }
418
+
419
+ private problems(live: boolean) {
420
+ const { outcomes, problems } = deriveRun(this.state.journal, this.state.plan);
421
+ const { failed, notStarted, partial, recovered } = problems;
422
+ const issues = failed.length + notStarted.length + partial.length;
423
+ const ok = html`<div class="ok"><span aria-hidden="true">✓</span>${msg('No problems')}</div>`;
424
+ if (!issues && !recovered.length) return ok;
425
+ const reason = (t: TaskOutcome) => runRelative(t.attempts[t.attempts.length - 1]?.reason || '—', this.run).slice(0, 200);
426
+ const stoppedLine = (stopped: TaskOutcome[]) =>
427
+ stopped.length
428
+ ? html`<div class="stopped">
429
+ <span>${stopped.length === 1 ? msg('1 later task not started') : msg(str`${stopped.length} later tasks not started`)}</span>
430
+ ${stopped.map((x) => taskChip(this, this.name(x), x))}
431
+ </div>`
432
+ : nothing;
433
+ // The tasks done after retrying are done, not problems: a group of their own, after the problems.
434
+ return html`${issues ? nothing : ok}${repeat(
435
+ failed,
436
+ (p) => p.task.key,
437
+ (p) => {
438
+ const last = p.task.attempts[p.task.attempts.length - 1];
439
+ return html`<div class="fl" @click=${(e: MouseEvent) => this.openRow(e, p.task)}>
440
+ ${statusWord({ text: outcomeLabel('failed'), tone: 'failed' })}
441
+ ${this.nameButton(p.task)}<span class="meta">${localTime(last?.ts, true)}</span>
442
+ <div class="meta">${stopLabel(last?.stop)}: ${reason(p.task)}</div>
443
+ ${stoppedLine(p.stopped)}
444
+ </div>`;
445
+ },
446
+ )}
447
+ ${repeat(
448
+ notStarted,
449
+ (t) => t.key,
450
+ (t) => html`<div class="fl" @click=${(e: MouseEvent) => this.openRow(e, t)}>
451
+ ${statusWord({ text: outcomeLabel('not_started'), tone: 'attention' })}
452
+ ${this.nameButton(t)}<span></span>
453
+ <div class="meta">${notStartedCause(t, outcomes, this.run) ? sentence(notStartedCause(t, outcomes, this.run)) : reason(t)}</div>
454
+ </div>`,
455
+ )}
456
+ ${repeat(
457
+ partial,
458
+ (t) => t.key,
459
+ (t) => html`<div class="fl" @click=${(e: MouseEvent) => this.openRow(e, t)}>
460
+ ${statusWord({ text: outcomeLabel('partial'), tone: outcomeTone('partial') })}
461
+ ${this.nameButton(t)}<span></span>
462
+ <div class="meta">${reason(t)}</div>
463
+ </div>`,
464
+ )}
465
+ ${recovered.length ? html`<h4 class="sub">${sentence(outcomeLabel('recovered'))} <span class="r">${recovered.length}</span></h4>` : nothing}
466
+ ${repeat(
467
+ recovered,
468
+ (t) => t.key,
469
+ (t) => {
470
+ const fails = t.tries.filter((a) => !a.ok).length;
471
+ const n = t.tries.length;
472
+ return html`<div class="fl muted" @click=${(e: MouseEvent) => this.openRow(e, t)}>
473
+ ${statusWord({ text: outcomeLabel('recovered'), tone: outcomeTone('recovered') })}
474
+ ${this.nameButton(t)}<span></span>
475
+ <div class="meta">${fails === 1
476
+ ? msg(str`Done on attempt ${n} | 1 failed attempt`)
477
+ : msg(str`Done on attempt ${n} | ${fails} failed attempts`)}</div>
478
+ </div>`;
479
+ },
480
+ )}
481
+ ${this.nextStep(live, issues)}`;
482
+ }
483
+
484
+ /** For a finished run with problems: how many tasks are not done (the tasks resume=True runs again). */
485
+ private nextStep(live: boolean, problemCount: number) {
486
+ if (live || !problemCount) return nothing;
487
+ const c = deriveRun(this.state.journal, this.state.plan).counts;
488
+ // A partly done task is finished in this run, and not done: a resume runs it again.
489
+ const again = c.total - c.finished + c.partial;
490
+ if (!again) return nothing;
491
+ return html`<div class="next" title="resume=True">${msg(str`${again} of ${c.total} tasks not done`)}</div>`;
492
+ }
493
+ }
494
+
495
+ declare global {
496
+ interface HTMLElementTagNameMap {
497
+ 'ca-overview': CaOverview;
498
+ }
499
+ }