@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,73 @@
1
+ // A scroller that comes back where the reader left it. The position is
2
+ // remembered in a memory (`memory.ts`: the history entry, or an embedded
3
+ // monitor's own); restoring waits until the content, which arrives over the
4
+ // network, is tall enough to scroll there.
5
+ import { pageMemory, type Memory } from './memory.js';
6
+
7
+ const GIVE_UP_MS = 6000;
8
+ const INPUT_EVENTS = ['wheel', 'touchstart', 'pointerdown', 'keydown'] as const;
9
+
10
+ export class ScrollMemory {
11
+ private el: HTMLElement | null = null;
12
+ private frame = 0;
13
+ private restoring = false;
14
+
15
+ constructor(
16
+ private readonly id: string,
17
+ /** Where the position is remembered: read at each use. */
18
+ private readonly memory: () => Memory = () => pageMemory,
19
+ ) {}
20
+
21
+ attach(el: HTMLElement): void {
22
+ if (this.el === el) return;
23
+ this.detach();
24
+ this.el = el;
25
+ el.addEventListener('scroll', this.onScroll, { passive: true });
26
+ }
27
+
28
+ detach(): void {
29
+ this.cancel();
30
+ this.el?.removeEventListener('scroll', this.onScroll);
31
+ this.el = null;
32
+ }
33
+
34
+ /** Go back to the remembered position, as soon as the content allows; to the top when none is remembered. */
35
+ restore(): void {
36
+ const el = this.el;
37
+ if (!el) return;
38
+ this.cancel();
39
+ const target = this.memory().recall<number>(this.id) ?? 0;
40
+ if (target <= 0) {
41
+ el.scrollTop = 0;
42
+ return;
43
+ }
44
+ const until = performance.now() + GIVE_UP_MS;
45
+ this.restoring = true;
46
+ for (const t of INPUT_EVENTS) el.addEventListener(t, this.cancel, { passive: true, once: true });
47
+ const step = () => {
48
+ const max = el.scrollHeight - el.clientHeight;
49
+ el.scrollTop = Math.min(target, max);
50
+ if (max >= target || performance.now() > until) return this.cancel();
51
+ this.frame = requestAnimationFrame(step);
52
+ };
53
+ step();
54
+ }
55
+
56
+ /** Start at the top (a new place). */
57
+ reset(): void {
58
+ this.cancel();
59
+ if (this.el) this.el.scrollTop = 0;
60
+ }
61
+
62
+ private readonly cancel = (): void => {
63
+ cancelAnimationFrame(this.frame);
64
+ this.frame = 0;
65
+ if (!this.restoring) return;
66
+ this.restoring = false;
67
+ for (const t of INPUT_EVENTS) this.el?.removeEventListener(t, this.cancel);
68
+ };
69
+
70
+ private readonly onScroll = (): void => {
71
+ if (!this.restoring && this.el) this.memory().remember(this.id, Math.round(this.el.scrollTop));
72
+ };
73
+ }
@@ -0,0 +1,177 @@
1
+ // Where the monitor is: one typed value, kept in the URL. Pure: parsing and
2
+ // formatting only; `view-router.ts` binds it to the browser's history.
3
+
4
+ export const BUILTIN_TABS = ['overview', 'tasks', 'journal', 'outputs', 'definitions', 'procs', 'stream'] as const;
5
+ export type BuiltinTab = (typeof BUILTIN_TABS)[number];
6
+ /** A built-in view, or a panel the pipeline registered (`panel:<name>`). */
7
+ export type Tab = BuiltinTab | `panel:${string}`;
8
+
9
+ /** What the task view shows next to (or instead of) the transcript. */
10
+ export const TASK_VIEWS = ['transcript', 'input', 'output', 'definition'] as const;
11
+ export type TaskView = (typeof TASK_VIEWS)[number];
12
+
13
+ /** A page that is not one run's: `hosts`, the hosts behind a hub's runs; `trends`, the runs of a period. */
14
+ export type Page = '' | 'hosts' | 'trends';
15
+
16
+ /** The lengths of a period the trends page offers, in days, ending today. */
17
+ export const TREND_DAYS = [7, 14, 30] as const;
18
+
19
+ export interface ViewRoute {
20
+ /** '' for a run's views; `hosts` for the hosts (on a hub), with no run. */
21
+ page: Page;
22
+ /** The run; '' until one is picked. */
23
+ run: string;
24
+ tab: Tab;
25
+ /** stream tab: the task key whose transcript is open (null: the latest, `latestTask`). */
26
+ key: string | null;
27
+ /** stream tab: what the task view shows. */
28
+ view: TaskView;
29
+ /** stream tab: the round shown, 1-based (null: follow the latest). */
30
+ round: number | null;
31
+ /** definitions tab: the selected kind (null: the default one). */
32
+ def: string | null;
33
+ /** tasks and journal tabs: only this kind (kept, and out of the URL, while another tab is shown). */
34
+ kind: string;
35
+ /** journal tab: only this stop ('bad': every attempt that did not complete). */
36
+ stop: string;
37
+ /** tasks and journal tabs: a text filter. */
38
+ q: string;
39
+ /** overview tab: the pipeline graph's layer, its segments joined by `/` ('': the layer the graph opens on). */
40
+ layer: string;
41
+ /** overview tab: the unit highlighted in the pipeline graph. */
42
+ unit: string;
43
+ /** overview tab: what is selected in the pipeline graph's layer (a node, a loop box or a mark; '' for nothing). */
44
+ sel: string;
45
+ /** trends page: the period, the last `days` days (0: the days `from` to `to`, YYYY-MM-DD). */
46
+ days: number;
47
+ from: string;
48
+ to: string;
49
+ /** trends page: the time zone its days are counted in ('': the browser's). */
50
+ tz: string;
51
+ /** trends page: only the runs of this run group. */
52
+ group: string;
53
+ /** trends page: the open tab, a trends panel's `tab` ('': the first, the trends). */
54
+ trendsTab: string;
55
+ }
56
+
57
+ export type ViewRoutePatch = Partial<ViewRoute>;
58
+
59
+ export const DEFAULT_VIEW_ROUTE: ViewRoute = {
60
+ page: '',
61
+ run: '',
62
+ tab: 'overview',
63
+ key: null,
64
+ view: 'transcript',
65
+ round: null,
66
+ def: null,
67
+ kind: '',
68
+ stop: '',
69
+ q: '',
70
+ layer: '',
71
+ unit: '',
72
+ sel: '',
73
+ days: 14,
74
+ from: '',
75
+ to: '',
76
+ tz: '',
77
+ group: '',
78
+ trendsTab: '',
79
+ };
80
+
81
+ const isTab = (t: string): t is Tab => (BUILTIN_TABS as readonly string[]).includes(t) || /^panel:.+/.test(t);
82
+ const isTaskView = (v: string): v is TaskView => (TASK_VIEWS as readonly string[]).includes(v);
83
+
84
+ export function parseViewRoute(search: string): ViewRoute {
85
+ const p = new URLSearchParams(search);
86
+ const tab = p.get('tab') ?? '';
87
+ const view = p.get('view') ?? '';
88
+ const round = Number(p.get('round'));
89
+ const page: Page = p.get('page') === 'hosts' ? 'hosts' : p.get('page') === 'trends' ? 'trends' : '';
90
+ const from = p.get('from') ?? '';
91
+ const to = p.get('to') ?? '';
92
+ const range = /^\d{4}-\d{2}-\d{2}$/.test(from) && /^\d{4}-\d{2}-\d{2}$/.test(to);
93
+ const days = Number(p.get('days'));
94
+ return {
95
+ page,
96
+ // A page of no run names none.
97
+ run: page ? '' : (p.get('run') ?? ''),
98
+ // The trends page's `tab` is its own (`trendsTab`), not a run's.
99
+ tab: page !== 'trends' && isTab(tab) ? tab : 'overview',
100
+ key: p.get('key') || null,
101
+ view: isTaskView(view) ? view : 'transcript',
102
+ round: Number.isInteger(round) && round > 0 ? round : null,
103
+ def: p.get('def') || null,
104
+ kind: p.get('kind') ?? '',
105
+ stop: p.get('stop') ?? '',
106
+ q: p.get('q') ?? '',
107
+ layer: p.get('layer') ?? '',
108
+ unit: p.get('unit') ?? '',
109
+ sel: p.get('sel') ?? '',
110
+ days: range ? 0 : (TREND_DAYS as readonly number[]).includes(days) ? days : DEFAULT_VIEW_ROUTE.days,
111
+ from: range ? from : '',
112
+ to: range ? to : '',
113
+ tz: p.get('tz') ?? '',
114
+ group: p.get('group') ?? '',
115
+ trendsTab: page === 'trends' ? (p.get('tab') ?? '') : '',
116
+ };
117
+ }
118
+
119
+ /** The query string for a view route: only what differs from the defaults, and only what its tab uses. */
120
+ export function formatViewRoute(r: ViewRoute): string {
121
+ if (r.page === 'hosts') return '?page=hosts';
122
+ if (r.page === 'trends') {
123
+ const p = new URLSearchParams({ page: 'trends' });
124
+ if (r.days === 0 && r.from && r.to) {
125
+ p.set('from', r.from);
126
+ p.set('to', r.to);
127
+ } else if (r.days !== DEFAULT_VIEW_ROUTE.days) p.set('days', String(r.days));
128
+ if (r.tz) p.set('tz', r.tz);
129
+ if (r.group) p.set('group', r.group);
130
+ if (r.trendsTab) p.set('tab', r.trendsTab);
131
+ return `?${p.toString()}`;
132
+ }
133
+ const p = new URLSearchParams();
134
+ if (r.run) p.set('run', r.run);
135
+ if (r.tab !== 'overview') p.set('tab', r.tab);
136
+ if (r.tab === 'stream') {
137
+ if (r.key) p.set('key', r.key);
138
+ if (r.view !== 'transcript') p.set('view', r.view);
139
+ if (r.round != null) p.set('round', String(r.round));
140
+ }
141
+ if (r.tab === 'definitions' && r.def) p.set('def', r.def);
142
+ if (r.tab === 'overview' && r.layer) p.set('layer', r.layer);
143
+ if (r.tab === 'overview' && r.unit) p.set('unit', r.unit);
144
+ if (r.tab === 'overview' && r.sel) p.set('sel', r.sel);
145
+ // The filters of the Tasks and History tabs: kept while another tab is shown (going back finds them), named in the URL only on their tabs.
146
+ const filtered = r.tab === 'tasks' || r.tab === 'journal';
147
+ if (filtered && r.kind) p.set('kind', r.kind);
148
+ if (r.tab === 'journal' && r.stop) p.set('stop', r.stop);
149
+ if (filtered && r.q) p.set('q', r.q);
150
+ const s = p.toString();
151
+ return s ? `?${s}` : '';
152
+ }
153
+
154
+ /** Apply a patch. Leaving a task (another key, run) forgets its view and round; another run forgets every selection. */
155
+ export function applyPatch(r: ViewRoute, patch: ViewRoutePatch): ViewRoute {
156
+ const next = { ...r, ...patch };
157
+ if (patch.run !== undefined && patch.run !== r.run) {
158
+ Object.assign(next, { key: null, def: null, round: null, layer: '', unit: '', sel: '', ...patch });
159
+ }
160
+ // A selection belongs to its layer.
161
+ if (patch.layer !== undefined && patch.layer !== r.layer && patch.sel === undefined) next.sel = '';
162
+ if (patch.key !== undefined && patch.key !== r.key) {
163
+ if (patch.view === undefined) next.view = 'transcript';
164
+ if (patch.round === undefined) next.round = null;
165
+ }
166
+ return next;
167
+ }
168
+
169
+ /**
170
+ * Whether going from `a` to `b` is a move to another place (a new history entry,
171
+ * so Back returns) or only a refinement of this one (the entry is replaced, so
172
+ * typing in a filter, highlighting a unit or selecting in the graph does not fill the history).
173
+ */
174
+ export function isNewPlace(a: ViewRoute, b: ViewRoute): boolean {
175
+ const place = (r: ViewRoute) => formatViewRoute({ ...r, kind: '', stop: '', q: '', unit: '', sel: '' });
176
+ return place(a) !== place(b);
177
+ }
@@ -0,0 +1,66 @@
1
+ // The view route, bound to the browser's history: navigating pushes an entry for a
2
+ // new place and replaces it for a refinement (a filter), Back and Forward
3
+ // restore it. In `memory` mode (an embedded monitor) the URL is left alone.
4
+ import { applyPatch, formatViewRoute, isNewPlace, parseViewRoute, type ViewRoute, type ViewRoutePatch } from './view-route.js';
5
+
6
+ export type ViewRouterMode = 'url' | 'memory';
7
+ /** Why the view route changed: the page loaded, the app navigated, or the reader went Back/Forward. */
8
+ export type ViewRouteCause = 'init' | 'push' | 'replace' | 'pop';
9
+
10
+ export class ViewRouter {
11
+ private current: ViewRoute;
12
+
13
+ constructor(
14
+ private readonly mode: ViewRouterMode,
15
+ private readonly onChange: (viewRoute: ViewRoute, cause: ViewRouteCause) => void,
16
+ initial?: ViewRoutePatch,
17
+ /** Called before a new history entry is pushed: what is kept per entry belongs to the one being left. */
18
+ private readonly onLeave: () => void = () => {},
19
+ ) {
20
+ const base = mode === 'url' ? parseViewRoute(location.search) : parseViewRoute('');
21
+ this.current = applyPatch(base, initial ?? {});
22
+ }
23
+
24
+ get viewRoute(): ViewRoute {
25
+ return this.current;
26
+ }
27
+
28
+ start(): void {
29
+ if (this.mode === 'url') {
30
+ history.scrollRestoration = 'manual';
31
+ addEventListener('popstate', this.onPop);
32
+ }
33
+ this.onChange(this.current, 'init');
34
+ }
35
+
36
+ stop(): void {
37
+ if (this.mode === 'url') removeEventListener('popstate', this.onPop);
38
+ }
39
+
40
+ /**
41
+ * Go to the view route with `patch` applied. A new place pushes a history entry,
42
+ * a refinement replaces it; `replace` forces replacing (a default filled in,
43
+ * not a step the reader took).
44
+ */
45
+ navigate(patch: ViewRoutePatch, opts: { replace?: boolean } = {}): void {
46
+ const next = applyPatch(this.current, patch);
47
+ if (formatViewRoute(next) === formatViewRoute(this.current)) return;
48
+ const push = !opts.replace && isNewPlace(this.current, next);
49
+ this.current = next;
50
+ if (this.mode === 'url') {
51
+ const url = `${location.pathname}${formatViewRoute(next)}${location.hash}`;
52
+ if (push) {
53
+ this.onLeave();
54
+ history.pushState({}, '', url);
55
+ } else {
56
+ history.replaceState(history.state, '', url);
57
+ }
58
+ }
59
+ this.onChange(next, push ? 'push' : 'replace');
60
+ }
61
+
62
+ private readonly onPop = (): void => {
63
+ this.current = parseViewRoute(location.search);
64
+ this.onChange(this.current, 'pop');
65
+ };
66
+ }
@@ -0,0 +1,13 @@
1
+ // Registers every `ca-*` element, and the `cae-*` elements they render.
2
+ import './monitor.js';
3
+ import './overview.js';
4
+ import './pipeline-graph.js';
5
+ import './task-view.js';
6
+ import './transcript.js';
7
+ import './task-table.js';
8
+ import './journal-table.js';
9
+ import './contracts.js';
10
+ import './definitions.js';
11
+ import './kpis.js';
12
+ import './timeline.js';
13
+ import './procs.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/contracts`: registers <ca-contracts>, the checked files, and the elements it renders.
2
+ export * from '../elements/lists/ca-contracts.js';
@@ -0,0 +1,3 @@
1
+ // `@contraagent/ui/definitions`: registers <ca-definitions> and <ca-definition>, the task definitions.
2
+ export * from '../elements/lists/ca-definitions.js';
3
+ export * from '../elements/shared/ca-definition.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/journal-table`: registers <ca-journal-table>, a run's history, and <cae-data-table>.
2
+ export * from '../elements/lists/ca-journal-table.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/kpis`: registers <ca-kpis>, a run's figures, and <cae-stat-tiles>.
2
+ export * from '../elements/overview/ca-kpis.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/monitor`: registers <ca-monitor>, the whole monitor, and every element it renders.
2
+ export * from '../elements/shell/ca-monitor.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/overview`: registers <ca-overview>, a run's overview, and the elements it renders.
2
+ export * from '../elements/overview/ca-overview.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/pipeline-graph`: registers <ca-pipeline-graph>, and the `cae-*` elements it renders.
2
+ export * from '../elements/overview/ca-pipeline-graph.js';
@@ -0,0 +1,3 @@
1
+ // `@contraagent/ui/procs`: registers <ca-procs-view> and <ca-proc-tree>, a run's processes.
2
+ export * from '../elements/lists/ca-procs-view.js';
3
+ export * from '../elements/lists/ca-proc-tree.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/task-table`: registers <ca-task-table>, and <cae-data-table>.
2
+ export * from '../elements/lists/ca-task-table.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/task-view`: registers <ca-task-view>, one task in detail, and the elements it renders.
2
+ export * from '../elements/task/ca-task-view.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/timeline`: registers <ca-timeline>, the agent sessions in time, and <cae-lanes>.
2
+ export * from '../elements/overview/ca-timeline.js';
@@ -0,0 +1,2 @@
1
+ // `@contraagent/ui/transcript`: registers <ca-transcript>, a task's transcript, and <cae-transcript>.
2
+ export * from '../elements/task/ca-transcript.js';
@@ -0,0 +1,204 @@
1
+ import { deriveRun, isPython, runRelative, type ContractRecord, type ContractSpec, type ContractStatus, type JournalRow, type Outputs, type Plan, type TaskOutcome } from '@contraagent/api';
2
+ import { localized, msg, str } from '@lit/localize';
3
+ import { LitElement, css, html, nothing } from 'lit';
4
+ import { customElement, property } from 'lit/decorators.js';
5
+ import { repeat } from 'lit/directives/repeat.js';
6
+ import { emit } from '../../core/events.js';
7
+ import { RememberedSet } from '../../core/memory.js';
8
+ import type { TaskView } from '../../core/view-route.js';
9
+ import { base } from '@contraagent/elements/styles';
10
+ import { executorIcon, executorIconStyles } from '../../words/executor.js';
11
+ import { kindUnit } from '../../words/format.js';
12
+ import { correctionTip, correctionsLabel, notRunText, type Producer } from '../../words/contract.js';
13
+ import { contractChip, contractStyles, fieldCheckTable, fileConditions, inputChip } from '../shared/contract-parts.js';
14
+
15
+ const CT_ORDER: readonly ContractStatus[] = ['invalid', 'refused', 'failed', 'running', 'pending', 'valid'];
16
+
17
+ /** Output contracts per status, worst first; a line of text when none is declared. */
18
+ export function ctChips(outputs: Outputs | null) {
19
+ const t = outputs?.tally;
20
+ const chips = t ? CT_ORDER.filter((k) => t[k]) : [];
21
+ return chips.length
22
+ ? chips.map((k) => contractChip(k, t?.[k]))
23
+ : html`<span class="meta">${msg('No checked files')}</span>`;
24
+ }
25
+
26
+ const shortPath = (p: string) => p.split('/').slice(-2).join('/');
27
+
28
+ /** A task as the reader names it: "kind · unit" (a run-scope task: its kind). */
29
+ export const taskName = (c: { key: string; kind?: string; unit?: string }): string =>
30
+ kindUnit({ kind: c.kind || c.key, unit: c.unit && c.unit !== c.key ? c.unit : '' });
31
+
32
+ /** Problems first (the order of `CT_ORDER`), then by task. */
33
+ const rank = (s: ContractStatus | null | undefined) => (s ? CT_ORDER.indexOf(s) : CT_ORDER.length);
34
+
35
+ /**
36
+ * The files each task must write (`OutputContract`) and read (`InputContract`),
37
+ * problems first, each checked field by field against its schema. Links open
38
+ * the task (`ca-open-task`).
39
+ *
40
+ * @fires ca-open-task - `{key, view}`: a link to the task's input, output or transcript
41
+ */
42
+ @customElement('ca-contracts')
43
+ @localized()
44
+ export class CaContracts extends LitElement {
45
+ static override styles = [
46
+ base,
47
+ contractStyles,
48
+ executorIconStyles,
49
+ css`
50
+ :host { display: block; container-type: inline-size; }
51
+ .ct-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
52
+ details.ct { border-top: 1px solid var(--line); }
53
+ details.ct > summary { list-style: none; cursor: pointer; padding: 7px 4px; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; }
54
+ details.ct > summary > * { min-width: 0; overflow-wrap: anywhere; }
55
+ details.ct > summary::-webkit-details-marker { display: none; }
56
+ details.ct > summary::before { content: '▸'; color: var(--text-muted); width: 10px; transition: transform 0.15s; }
57
+ details.ct[open] > summary::before { transform: rotate(90deg); }
58
+ details.ct > summary:hover { background: var(--raise); border-radius: 8px; }
59
+ .k-ic { margin-right: 0; }
60
+ .ct-f { margin-left: auto; white-space: nowrap; }
61
+ .ct-body { padding: 4px 10px 14px 24px; }
62
+ @container (max-width: 480px) {
63
+ .ct-body { padding: 4px 0 14px 12px; }
64
+ }
65
+ .ct-links { margin-top: 10px; font-size: 12px; }
66
+ .lead { margin: -4px 0 10px; }
67
+ .one { display: flex; align-items: center; gap: 10px; padding: 7px 4px 7px 24px; border-top: 1px solid var(--line); flex-wrap: wrap; }
68
+ .why { color: var(--text-2); font-size: 12px; }
69
+ `,
70
+ ];
71
+
72
+ @property({ attribute: false }) outputs: Outputs | null = null;
73
+ /** The run, to show paths inside its directory short. */
74
+ @property() run = '';
75
+ /** The run's journal: a failed task's card shows why it failed. Optional. */
76
+ @property({ attribute: false }) journal: JournalRow[] = [];
77
+ /** The run's plan: with the journal, what happened to the task that writes a missing input. Optional. */
78
+ @property({ attribute: false }) plan: Plan | null = null;
79
+ private outcomes: ReadonlyMap<string, TaskOutcome> = new Map();
80
+
81
+ /** Which contracts the reader opened, kept across Back and reload. */
82
+ private readonly open = new RememberedSet('contracts:open', this);
83
+
84
+ override render() {
85
+ const cs = this.outputs?.contracts ?? [];
86
+ this.outcomes = this.plan ? deriveRun(this.journal, this.plan).outcomes : new Map<string, TaskOutcome>();
87
+ if (!cs.length) {
88
+ return html`<div class="blank"><span class="ic" aria-hidden="true">▣</span><b>${msg('No checked files')}</b>
89
+ <span>${msg('No task declares an OutputContract or an InputContract')}</span></div>`;
90
+ }
91
+ const outs = cs
92
+ .flatMap((c) => (c.outputs ?? []).map((o) => [c, o] as const))
93
+ .sort(([a, x], [b, y]) => rank(x.status) - rank(y.status) || a.key.localeCompare(b.key));
94
+ const ins = cs.flatMap((c) => (c.inputs ?? []).map((i) => [c, i] as const));
95
+ return html`<div class="g12">
96
+ <section class="panel c12">
97
+ <h3 title=${msg('OutputContract')}>${msg('Outputs')}
98
+ <span class="r">${msg('Files each task must write')}</span></h3>
99
+ <div class="ct-row">${ctChips(this.outputs)}</div>
100
+ ${repeat(outs, ([c, o]) => `out|${c.key}|${o.path}`, ([c, o]) => this.outRow(c, o))}
101
+ </section>
102
+ ${ins.length
103
+ ? html`<section class="panel c12">
104
+ <h3 title=${msg('InputContract')}>${msg('Inputs')}
105
+ <span class="r">${msg('Files each task reads')}</span></h3>
106
+ ${repeat(ins, ([c, i]) => `in|${c.key}|${i.path}`, ([c, i]) => this.inRow(c, i))}
107
+ </section>`
108
+ : nothing}
109
+ </div>`;
110
+ }
111
+
112
+ private details(id: string, summary: unknown, body: unknown) {
113
+ return html`<details class="ct" ?open=${this.open.has(id)}
114
+ @toggle=${(e: Event) => this.open.set(id, (e.target as HTMLDetailsElement).open)}>
115
+ <summary class="ct-sum">${summary}</summary>
116
+ <div class="ct-body">${body}</div>
117
+ </details>`;
118
+ }
119
+
120
+ private link(key: string, view: TaskView, text: string) {
121
+ return html`<a class="lnk" href="#" @click=${(e: Event) => {
122
+ e.preventDefault();
123
+ emit(this, 'ca-open-task', { key, view });
124
+ }}>${text}</a>`;
125
+ }
126
+
127
+ private who(c: ContractRecord) {
128
+ const py = isPython(c);
129
+ const kindName = py ? msg('Python task') : msg('Agent task');
130
+ return html`${executorIcon(py, kindName)}
131
+ <b class="jmono" title=${c.key}>${taskName(c)}</b>`;
132
+ }
133
+
134
+ /** Who writes each output file: for naming the task a missing input should have come from. */
135
+ private producerOf = (path: string): Producer | undefined => {
136
+ for (const c of this.outputs?.contracts ?? []) {
137
+ const o = (c.outputs ?? []).find((x) => x.path === path);
138
+ if (o) return { name: taskName(c), written: !!o.file.exists, outcome: this.outcomes.get(c.key)?.outcome };
139
+ }
140
+ return undefined;
141
+ };
142
+
143
+ /** The reason of a task's last journal row (run-relative), when the journal was given. */
144
+ private reasonOf(key: string): string {
145
+ for (let i = this.journal.length - 1; i >= 0; i--) {
146
+ const r = this.journal[i];
147
+ if (r?.key === key) return runRelative(r.reason, this.run);
148
+ }
149
+ return '';
150
+ }
151
+
152
+ private outRow(c: ContractRecord, o: ContractSpec) {
153
+ // A task that never ran: one line saying why, nothing to open.
154
+ if (o.status === 'refused') {
155
+ return html`<div class="one">
156
+ ${contractChip('refused')}${this.who(c)}
157
+ <span class="why">${notRunText(o, this.run, this.producerOf)}</span>
158
+ </div>`;
159
+ }
160
+ const f = o.file;
161
+ const status = o.status;
162
+ const rounds = o.rounds ?? 0;
163
+ const errors = o.errors ?? [];
164
+ const name = taskName(c);
165
+ // The chip says why there is no file; the size column shows a size only when there is one.
166
+ return this.details(
167
+ `out|${c.key}|${o.path}`,
168
+ html`${contractChip(status)}
169
+ ${rounds > 1 ? html`<span class="meta" title=${correctionTip()}>${correctionsLabel(rounds, status === 'valid')}</span>` : nothing}
170
+ ${this.who(c)}
171
+ <span class="jmono jdim ct-path" title=${o.path}>${shortPath(o.path)}</span>
172
+ ${status === 'failed' && this.reasonOf(c.key) ? html`<span class="why">${this.reasonOf(c.key)}</span>` : nothing}
173
+ <span class="meta ct-f">${f.exists ? `${f.size ?? 0} B` : !status ? msg('No file') : nothing}</span>`,
174
+ html`${fileConditions(o, 'output')}
175
+ ${fieldCheckTable(o)}
176
+ ${errors.length ? html`<h4>${msg('Errors')}</h4><pre class="ct-err">${errors.map((e) => runRelative(e, this.run)).join('\n')}</pre>` : nothing}
177
+ <div class="ct-links">
178
+ ${this.link(c.key, 'output', msg(str`${name}: input and output`))}
179
+ ${isPython(c) ? nothing : html`<br />${this.link(c.key, 'transcript', msg(str`${name}: transcript`))}`}
180
+ </div>`,
181
+ );
182
+ }
183
+
184
+ private inRow(c: ContractRecord, i: ContractSpec) {
185
+ const f = i.file;
186
+ const ok = !!f.exists;
187
+ return this.details(
188
+ `in|${c.key}|${i.path}`,
189
+ html`${inputChip(i)}
190
+ ${this.who(c)}
191
+ <span class="jmono jdim ct-path" title=${i.path}>${shortPath(i.path)}</span>
192
+ <span class="meta ct-f">${ok ? `${f.size ?? 0} B` : msg('No file')}</span>`,
193
+ html`${fileConditions(i, 'input')}
194
+ ${fieldCheckTable(i)}
195
+ <div class="ct-links">${this.link(c.key, 'input', msg(str`${taskName(c)}: input`))}</div>`,
196
+ );
197
+ }
198
+ }
199
+
200
+ declare global {
201
+ interface HTMLElementTagNameMap {
202
+ 'ca-contracts': CaContracts;
203
+ }
204
+ }