@contraagent/ui 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -2
- package/custom-elements.json +7084 -0
- package/dist/adapters/check-rows.d.ts +18 -0
- package/dist/adapters/check-rows.d.ts.map +1 -0
- package/dist/adapters/check-rows.js +75 -0
- package/dist/adapters/check-rows.js.map +1 -0
- package/dist/adapters/filters.d.ts +29 -0
- package/dist/adapters/filters.d.ts.map +1 -0
- package/dist/adapters/filters.js +74 -0
- package/dist/adapters/filters.js.map +1 -0
- package/dist/adapters/graph/compound.d.ts +93 -0
- package/dist/adapters/graph/compound.d.ts.map +1 -0
- package/dist/adapters/graph/compound.js +322 -0
- package/dist/adapters/graph/compound.js.map +1 -0
- package/dist/adapters/graph/flow-index.d.ts +54 -0
- package/dist/adapters/graph/flow-index.d.ts.map +1 -0
- package/dist/adapters/graph/flow-index.js +129 -0
- package/dist/adapters/graph/flow-index.js.map +1 -0
- package/dist/adapters/graph/highlight.d.ts +14 -0
- package/dist/adapters/graph/highlight.d.ts.map +1 -0
- package/dist/adapters/graph/highlight.js +33 -0
- package/dist/adapters/graph/highlight.js.map +1 -0
- package/dist/adapters/graph/input.d.ts +50 -0
- package/dist/adapters/graph/input.d.ts.map +1 -0
- package/dist/adapters/graph/input.js +201 -0
- package/dist/adapters/graph/input.js.map +1 -0
- package/dist/adapters/graph/layer.d.ts +33 -0
- package/dist/adapters/graph/layer.d.ts.map +1 -0
- package/dist/adapters/graph/layer.js +94 -0
- package/dist/adapters/graph/layer.js.map +1 -0
- package/dist/adapters/graph/matrix.d.ts +62 -0
- package/dist/adapters/graph/matrix.d.ts.map +1 -0
- package/dist/adapters/graph/matrix.js +96 -0
- package/dist/adapters/graph/matrix.js.map +1 -0
- package/dist/adapters/graph/project.d.ts +49 -0
- package/dist/adapters/graph/project.d.ts.map +1 -0
- package/dist/adapters/graph/project.js +319 -0
- package/dist/adapters/graph/project.js.map +1 -0
- package/dist/adapters/graph/selection.d.ts +31 -0
- package/dist/adapters/graph/selection.d.ts.map +1 -0
- package/dist/adapters/graph/selection.js +48 -0
- package/dist/adapters/graph/selection.js.map +1 -0
- package/dist/adapters/graph/states.d.ts +6 -0
- package/dist/adapters/graph/states.d.ts.map +1 -0
- package/dist/adapters/graph/states.js +5 -0
- package/dist/adapters/graph/states.js.map +1 -0
- package/dist/adapters/graph/types.d.ts +141 -0
- package/dist/adapters/graph/types.d.ts.map +1 -0
- package/dist/adapters/graph/types.js +3 -0
- package/dist/adapters/graph/types.js.map +1 -0
- package/dist/adapters/graph/words.d.ts +48 -0
- package/dist/adapters/graph/words.d.ts.map +1 -0
- package/dist/adapters/graph/words.js +128 -0
- package/dist/adapters/graph/words.js.map +1 -0
- package/dist/adapters/index.d.ts +18 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +23 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/journal-columns.d.ts +21 -0
- package/dist/adapters/journal-columns.d.ts.map +1 -0
- package/dist/adapters/journal-columns.js +179 -0
- package/dist/adapters/journal-columns.js.map +1 -0
- package/dist/adapters/kpi-tiles.d.ts +47 -0
- package/dist/adapters/kpi-tiles.d.ts.map +1 -0
- package/dist/adapters/kpi-tiles.js +173 -0
- package/dist/adapters/kpi-tiles.js.map +1 -0
- package/dist/adapters/lanes.d.ts +31 -0
- package/dist/adapters/lanes.d.ts.map +1 -0
- package/dist/adapters/lanes.js +75 -0
- package/dist/adapters/lanes.js.map +1 -0
- package/dist/adapters/model-shares.d.ts +27 -0
- package/dist/adapters/model-shares.d.ts.map +1 -0
- package/dist/adapters/model-shares.js +52 -0
- package/dist/adapters/model-shares.js.map +1 -0
- package/dist/adapters/panel-body.d.ts +20 -0
- package/dist/adapters/panel-body.d.ts.map +1 -0
- package/dist/adapters/panel-body.js +63 -0
- package/dist/adapters/panel-body.js.map +1 -0
- package/dist/adapters/preflight.d.ts +12 -0
- package/dist/adapters/preflight.d.ts.map +1 -0
- package/dist/adapters/preflight.js +15 -0
- package/dist/adapters/preflight.js.map +1 -0
- package/dist/adapters/task-columns.d.ts +19 -0
- package/dist/adapters/task-columns.d.ts.map +1 -0
- package/dist/adapters/task-columns.js +107 -0
- package/dist/adapters/task-columns.js.map +1 -0
- package/dist/adapters/transcript/index.d.ts +6 -0
- package/dist/adapters/transcript/index.d.ts.map +1 -0
- package/dist/adapters/transcript/index.js +8 -0
- package/dist/adapters/transcript/index.js.map +1 -0
- package/dist/adapters/transcript/model.d.ts +42 -0
- package/dist/adapters/transcript/model.d.ts.map +1 -0
- package/dist/adapters/transcript/model.js +128 -0
- package/dist/adapters/transcript/model.js.map +1 -0
- package/dist/adapters/transcript/rounds.d.ts +15 -0
- package/dist/adapters/transcript/rounds.d.ts.map +1 -0
- package/dist/adapters/transcript/rounds.js +74 -0
- package/dist/adapters/transcript/rounds.js.map +1 -0
- package/dist/adapters/transcript/sections.d.ts +18 -0
- package/dist/adapters/transcript/sections.d.ts.map +1 -0
- package/dist/adapters/transcript/sections.js +69 -0
- package/dist/adapters/transcript/sections.js.map +1 -0
- package/dist/adapters/transcript/web.d.ts +12 -0
- package/dist/adapters/transcript/web.d.ts.map +1 -0
- package/dist/adapters/transcript/web.js +39 -0
- package/dist/adapters/transcript/web.js.map +1 -0
- package/dist/adapters/transcript/who.d.ts +15 -0
- package/dist/adapters/transcript/who.d.ts.map +1 -0
- package/dist/adapters/transcript/who.js +42 -0
- package/dist/adapters/transcript/who.js.map +1 -0
- package/dist/adapters/trends.d.ts +11 -0
- package/dist/adapters/trends.d.ts.map +1 -0
- package/dist/adapters/trends.js +316 -0
- package/dist/adapters/trends.js.map +1 -0
- package/dist/contraagent-ui.js +985 -0
- package/dist/controllers/locale.d.ts +25 -0
- package/dist/controllers/locale.d.ts.map +1 -0
- package/dist/controllers/locale.js +33 -0
- package/dist/controllers/locale.js.map +1 -0
- package/dist/controllers/shortcuts.d.ts +29 -0
- package/dist/controllers/shortcuts.d.ts.map +1 -0
- package/dist/controllers/shortcuts.js +51 -0
- package/dist/controllers/shortcuts.js.map +1 -0
- package/dist/controllers/stream.d.ts +41 -0
- package/dist/controllers/stream.d.ts.map +1 -0
- package/dist/controllers/stream.js +90 -0
- package/dist/controllers/stream.js.map +1 -0
- package/dist/controllers/task-detail.d.ts +22 -0
- package/dist/controllers/task-detail.d.ts.map +1 -0
- package/dist/controllers/task-detail.js +50 -0
- package/dist/controllers/task-detail.js.map +1 -0
- package/dist/controllers/theme.d.ts +32 -0
- package/dist/controllers/theme.d.ts.map +1 -0
- package/dist/controllers/theme.js +56 -0
- package/dist/controllers/theme.js.map +1 -0
- package/dist/core/clock.d.ts +20 -0
- package/dist/core/clock.d.ts.map +1 -0
- package/dist/core/clock.js +45 -0
- package/dist/core/clock.js.map +1 -0
- package/dist/core/events.d.ts +107 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +5 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/i18n.d.ts +21 -0
- package/dist/core/i18n.d.ts.map +1 -0
- package/dist/core/i18n.js +71 -0
- package/dist/core/i18n.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/memory.d.ts +51 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +174 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/route.d.ts +62 -0
- package/dist/core/route.d.ts.map +1 -0
- package/dist/core/route.js +143 -0
- package/dist/core/route.js.map +1 -0
- package/dist/core/router.d.ts +27 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +57 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/scroll.d.ts +21 -0
- package/dist/core/scroll.d.ts.map +1 -0
- package/dist/core/scroll.js +74 -0
- package/dist/core/scroll.js.map +1 -0
- package/dist/core/view-route.d.ts +62 -0
- package/dist/core/view-route.d.ts.map +1 -0
- package/dist/core/view-route.js +143 -0
- package/dist/core/view-route.js.map +1 -0
- package/dist/core/view-router.d.ts +27 -0
- package/dist/core/view-router.d.ts.map +1 -0
- package/dist/core/view-router.js +57 -0
- package/dist/core/view-router.js.map +1 -0
- package/dist/define/all.d.ts +13 -0
- package/dist/define/all.d.ts.map +1 -0
- package/dist/define/all.js +14 -0
- package/dist/define/all.js.map +1 -0
- package/dist/define/contracts.d.ts +2 -0
- package/dist/define/contracts.d.ts.map +1 -0
- package/dist/define/contracts.js +3 -0
- package/dist/define/contracts.js.map +1 -0
- package/dist/define/definitions.d.ts +3 -0
- package/dist/define/definitions.d.ts.map +1 -0
- package/dist/define/definitions.js +4 -0
- package/dist/define/definitions.js.map +1 -0
- package/dist/define/journal-table.d.ts +2 -0
- package/dist/define/journal-table.d.ts.map +1 -0
- package/dist/define/journal-table.js +3 -0
- package/dist/define/journal-table.js.map +1 -0
- package/dist/define/kpis.d.ts +2 -0
- package/dist/define/kpis.d.ts.map +1 -0
- package/dist/define/kpis.js +3 -0
- package/dist/define/kpis.js.map +1 -0
- package/dist/define/monitor.d.ts +2 -0
- package/dist/define/monitor.d.ts.map +1 -0
- package/dist/define/monitor.js +3 -0
- package/dist/define/monitor.js.map +1 -0
- package/dist/define/overview.d.ts +2 -0
- package/dist/define/overview.d.ts.map +1 -0
- package/dist/define/overview.js +3 -0
- package/dist/define/overview.js.map +1 -0
- package/dist/define/pipeline-graph.d.ts +2 -0
- package/dist/define/pipeline-graph.d.ts.map +1 -0
- package/dist/define/pipeline-graph.js +3 -0
- package/dist/define/pipeline-graph.js.map +1 -0
- package/dist/define/procs.d.ts +3 -0
- package/dist/define/procs.d.ts.map +1 -0
- package/dist/define/procs.js +4 -0
- package/dist/define/procs.js.map +1 -0
- package/dist/define/task-table.d.ts +2 -0
- package/dist/define/task-table.d.ts.map +1 -0
- package/dist/define/task-table.js +3 -0
- package/dist/define/task-table.js.map +1 -0
- package/dist/define/task-view.d.ts +2 -0
- package/dist/define/task-view.d.ts.map +1 -0
- package/dist/define/task-view.js +3 -0
- package/dist/define/task-view.js.map +1 -0
- package/dist/define/timeline.d.ts +2 -0
- package/dist/define/timeline.d.ts.map +1 -0
- package/dist/define/timeline.js +3 -0
- package/dist/define/timeline.js.map +1 -0
- package/dist/define/transcript.d.ts +2 -0
- package/dist/define/transcript.d.ts.map +1 -0
- package/dist/define/transcript.js +3 -0
- package/dist/define/transcript.js.map +1 -0
- package/dist/elements/lists/ca-contracts.d.ts +46 -0
- package/dist/elements/lists/ca-contracts.d.ts.map +1 -0
- package/dist/elements/lists/ca-contracts.js +199 -0
- package/dist/elements/lists/ca-contracts.js.map +1 -0
- package/dist/elements/lists/ca-definitions.d.ts +41 -0
- package/dist/elements/lists/ca-definitions.d.ts.map +1 -0
- package/dist/elements/lists/ca-definitions.js +182 -0
- package/dist/elements/lists/ca-definitions.js.map +1 -0
- package/dist/elements/lists/ca-journal-table.d.ts +37 -0
- package/dist/elements/lists/ca-journal-table.d.ts.map +1 -0
- package/dist/elements/lists/ca-journal-table.js +170 -0
- package/dist/elements/lists/ca-journal-table.js.map +1 -0
- package/dist/elements/lists/ca-panel-body.d.ts +29 -0
- package/dist/elements/lists/ca-panel-body.d.ts.map +1 -0
- package/dist/elements/lists/ca-panel-body.js +144 -0
- package/dist/elements/lists/ca-panel-body.js.map +1 -0
- package/dist/elements/lists/ca-panel-view.d.ts +21 -0
- package/dist/elements/lists/ca-panel-view.d.ts.map +1 -0
- package/dist/elements/lists/ca-panel-view.js +59 -0
- package/dist/elements/lists/ca-panel-view.js.map +1 -0
- package/dist/elements/lists/ca-proc-tree.d.ts +16 -0
- package/dist/elements/lists/ca-proc-tree.d.ts.map +1 -0
- package/dist/elements/lists/ca-proc-tree.js +63 -0
- package/dist/elements/lists/ca-proc-tree.js.map +1 -0
- package/dist/elements/lists/ca-procs-view.d.ts +27 -0
- package/dist/elements/lists/ca-procs-view.d.ts.map +1 -0
- package/dist/elements/lists/ca-procs-view.js +91 -0
- package/dist/elements/lists/ca-procs-view.js.map +1 -0
- package/dist/elements/lists/ca-task-table.d.ts +33 -0
- package/dist/elements/lists/ca-task-table.d.ts.map +1 -0
- package/dist/elements/lists/ca-task-table.js +115 -0
- package/dist/elements/lists/ca-task-table.js.map +1 -0
- package/dist/elements/lists/filters.d.ts +28 -0
- package/dist/elements/lists/filters.d.ts.map +1 -0
- package/dist/elements/lists/filters.js +71 -0
- package/dist/elements/lists/filters.js.map +1 -0
- package/dist/elements/lists/index.d.ts +9 -0
- package/dist/elements/lists/index.d.ts.map +1 -0
- package/dist/elements/lists/index.js +9 -0
- package/dist/elements/lists/index.js.map +1 -0
- package/dist/elements/overview/ca-kpis.d.ts +32 -0
- package/dist/elements/overview/ca-kpis.d.ts.map +1 -0
- package/dist/elements/overview/ca-kpis.js +62 -0
- package/dist/elements/overview/ca-kpis.js.map +1 -0
- package/dist/elements/overview/ca-model-usage.d.ts +25 -0
- package/dist/elements/overview/ca-model-usage.d.ts.map +1 -0
- package/dist/elements/overview/ca-model-usage.js +118 -0
- package/dist/elements/overview/ca-model-usage.js.map +1 -0
- package/dist/elements/overview/ca-overview.d.ts +66 -0
- package/dist/elements/overview/ca-overview.d.ts.map +1 -0
- package/dist/elements/overview/ca-overview.js +456 -0
- package/dist/elements/overview/ca-overview.js.map +1 -0
- package/dist/elements/overview/ca-pipeline-graph.d.ts +211 -0
- package/dist/elements/overview/ca-pipeline-graph.d.ts.map +1 -0
- package/dist/elements/overview/ca-pipeline-graph.js +616 -0
- package/dist/elements/overview/ca-pipeline-graph.js.map +1 -0
- package/dist/elements/overview/ca-pipeline-progress.d.ts +17 -0
- package/dist/elements/overview/ca-pipeline-progress.d.ts.map +1 -0
- package/dist/elements/overview/ca-pipeline-progress.js +119 -0
- package/dist/elements/overview/ca-pipeline-progress.js.map +1 -0
- package/dist/elements/overview/ca-plan-matrix.d.ts +27 -0
- package/dist/elements/overview/ca-plan-matrix.d.ts.map +1 -0
- package/dist/elements/overview/ca-plan-matrix.js +113 -0
- package/dist/elements/overview/ca-plan-matrix.js.map +1 -0
- package/dist/elements/overview/ca-quota.d.ts +42 -0
- package/dist/elements/overview/ca-quota.d.ts.map +1 -0
- package/dist/elements/overview/ca-quota.js +179 -0
- package/dist/elements/overview/ca-quota.js.map +1 -0
- package/dist/elements/overview/ca-run-driver.d.ts +33 -0
- package/dist/elements/overview/ca-run-driver.d.ts.map +1 -0
- package/dist/elements/overview/ca-run-driver.js +146 -0
- package/dist/elements/overview/ca-run-driver.js.map +1 -0
- package/dist/elements/overview/ca-spend-breakdown.d.ts +24 -0
- package/dist/elements/overview/ca-spend-breakdown.d.ts.map +1 -0
- package/dist/elements/overview/ca-spend-breakdown.js +108 -0
- package/dist/elements/overview/ca-spend-breakdown.js.map +1 -0
- package/dist/elements/overview/ca-timeline.d.ts +28 -0
- package/dist/elements/overview/ca-timeline.d.ts.map +1 -0
- package/dist/elements/overview/ca-timeline.js +72 -0
- package/dist/elements/overview/ca-timeline.js.map +1 -0
- package/dist/elements/overview/ca-workers.d.ts +23 -0
- package/dist/elements/overview/ca-workers.d.ts.map +1 -0
- package/dist/elements/overview/ca-workers.js +86 -0
- package/dist/elements/overview/ca-workers.js.map +1 -0
- package/dist/elements/overview/flow-types.d.ts +2 -0
- package/dist/elements/overview/flow-types.d.ts.map +1 -0
- package/dist/elements/overview/flow-types.js +2 -0
- package/dist/elements/overview/flow-types.js.map +1 -0
- package/dist/elements/overview/graph/arrange.d.ts +16 -0
- package/dist/elements/overview/graph/arrange.d.ts.map +1 -0
- package/dist/elements/overview/graph/arrange.js +152 -0
- package/dist/elements/overview/graph/arrange.js.map +1 -0
- package/dist/elements/overview/graph/card.d.ts +64 -0
- package/dist/elements/overview/graph/card.d.ts.map +1 -0
- package/dist/elements/overview/graph/card.js +160 -0
- package/dist/elements/overview/graph/card.js.map +1 -0
- package/dist/elements/overview/graph/flow-index.d.ts +52 -0
- package/dist/elements/overview/graph/flow-index.d.ts.map +1 -0
- package/dist/elements/overview/graph/flow-index.js +121 -0
- package/dist/elements/overview/graph/flow-index.js.map +1 -0
- package/dist/elements/overview/graph/highlight.d.ts +14 -0
- package/dist/elements/overview/graph/highlight.d.ts.map +1 -0
- package/dist/elements/overview/graph/highlight.js +33 -0
- package/dist/elements/overview/graph/highlight.js.map +1 -0
- package/dist/elements/overview/graph/layer.d.ts +32 -0
- package/dist/elements/overview/graph/layer.d.ts.map +1 -0
- package/dist/elements/overview/graph/layer.js +92 -0
- package/dist/elements/overview/graph/layer.js.map +1 -0
- package/dist/elements/overview/graph/layout.d.ts +80 -0
- package/dist/elements/overview/graph/layout.d.ts.map +1 -0
- package/dist/elements/overview/graph/layout.js +261 -0
- package/dist/elements/overview/graph/layout.js.map +1 -0
- package/dist/elements/overview/graph/marks.d.ts +18 -0
- package/dist/elements/overview/graph/marks.d.ts.map +1 -0
- package/dist/elements/overview/graph/marks.js +17 -0
- package/dist/elements/overview/graph/marks.js.map +1 -0
- package/dist/elements/overview/graph/matrix.d.ts +58 -0
- package/dist/elements/overview/graph/matrix.d.ts.map +1 -0
- package/dist/elements/overview/graph/matrix.js +93 -0
- package/dist/elements/overview/graph/matrix.js.map +1 -0
- package/dist/elements/overview/graph/nav.d.ts +15 -0
- package/dist/elements/overview/graph/nav.d.ts.map +1 -0
- package/dist/elements/overview/graph/nav.js +80 -0
- package/dist/elements/overview/graph/nav.js.map +1 -0
- package/dist/elements/overview/graph/pan-zoom.d.ts +83 -0
- package/dist/elements/overview/graph/pan-zoom.d.ts.map +1 -0
- package/dist/elements/overview/graph/pan-zoom.js +189 -0
- package/dist/elements/overview/graph/pan-zoom.js.map +1 -0
- package/dist/elements/overview/graph/paths.d.ts +9 -0
- package/dist/elements/overview/graph/paths.d.ts.map +1 -0
- package/dist/elements/overview/graph/paths.js +44 -0
- package/dist/elements/overview/graph/paths.js.map +1 -0
- package/dist/elements/overview/graph/place-card.d.ts +36 -0
- package/dist/elements/overview/graph/place-card.d.ts.map +1 -0
- package/dist/elements/overview/graph/place-card.js +68 -0
- package/dist/elements/overview/graph/place-card.js.map +1 -0
- package/dist/elements/overview/graph/project.d.ts +31 -0
- package/dist/elements/overview/graph/project.d.ts.map +1 -0
- package/dist/elements/overview/graph/project.js +455 -0
- package/dist/elements/overview/graph/project.js.map +1 -0
- package/dist/elements/overview/graph/selection.d.ts +31 -0
- package/dist/elements/overview/graph/selection.d.ts.map +1 -0
- package/dist/elements/overview/graph/selection.js +44 -0
- package/dist/elements/overview/graph/selection.js.map +1 -0
- package/dist/elements/overview/graph/states.d.ts +6 -0
- package/dist/elements/overview/graph/states.d.ts.map +1 -0
- package/dist/elements/overview/graph/states.js +5 -0
- package/dist/elements/overview/graph/states.js.map +1 -0
- package/dist/elements/overview/graph/types.d.ts +124 -0
- package/dist/elements/overview/graph/types.d.ts.map +1 -0
- package/dist/elements/overview/graph/types.js +3 -0
- package/dist/elements/overview/graph/types.js.map +1 -0
- package/dist/elements/overview/graph/view.d.ts +16 -0
- package/dist/elements/overview/graph/view.d.ts.map +1 -0
- package/dist/elements/overview/graph/view.js +20 -0
- package/dist/elements/overview/graph/view.js.map +1 -0
- package/dist/elements/overview/index.d.ts +10 -0
- package/dist/elements/overview/index.d.ts.map +1 -0
- package/dist/elements/overview/index.js +10 -0
- package/dist/elements/overview/index.js.map +1 -0
- package/dist/elements/overview/kpis-model.d.ts +31 -0
- package/dist/elements/overview/kpis-model.d.ts.map +1 -0
- package/dist/elements/overview/kpis-model.js +30 -0
- package/dist/elements/overview/kpis-model.js.map +1 -0
- package/dist/elements/overview/logic.d.ts +442 -0
- package/dist/elements/overview/logic.d.ts.map +1 -0
- package/dist/elements/overview/logic.js +1431 -0
- package/dist/elements/overview/logic.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/actions.d.ts +16 -0
- package/dist/elements/overview/pipeline-graph/actions.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/actions.js +42 -0
- package/dist/elements/overview/pipeline-graph/actions.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/crumbs.d.ts +15 -0
- package/dist/elements/overview/pipeline-graph/crumbs.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/crumbs.js +70 -0
- package/dist/elements/overview/pipeline-graph/crumbs.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/dag.d.ts +4 -0
- package/dist/elements/overview/pipeline-graph/dag.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/dag.js +259 -0
- package/dist/elements/overview/pipeline-graph/dag.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/host.d.ts +24 -0
- package/dist/elements/overview/pipeline-graph/host.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/host.js +2 -0
- package/dist/elements/overview/pipeline-graph/host.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/icons.d.ts +5 -0
- package/dist/elements/overview/pipeline-graph/icons.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/icons.js +13 -0
- package/dist/elements/overview/pipeline-graph/icons.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/inspector.d.ts +5 -0
- package/dist/elements/overview/pipeline-graph/inspector.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/inspector.js +100 -0
- package/dist/elements/overview/pipeline-graph/inspector.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/legend.d.ts +9 -0
- package/dist/elements/overview/pipeline-graph/legend.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/legend.js +59 -0
- package/dist/elements/overview/pipeline-graph/legend.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/matrix.d.ts +4 -0
- package/dist/elements/overview/pipeline-graph/matrix.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/matrix.js +193 -0
- package/dist/elements/overview/pipeline-graph/matrix.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/outline.d.ts +53 -0
- package/dist/elements/overview/pipeline-graph/outline.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/outline.js +111 -0
- package/dist/elements/overview/pipeline-graph/outline.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/strings.d.ts +11 -0
- package/dist/elements/overview/pipeline-graph/strings.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/strings.js +49 -0
- package/dist/elements/overview/pipeline-graph/strings.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/styles.d.ts +4 -0
- package/dist/elements/overview/pipeline-graph/styles.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/styles.js +96 -0
- package/dist/elements/overview/pipeline-graph/styles.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/table.d.ts +11 -0
- package/dist/elements/overview/pipeline-graph/table.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/table.js +74 -0
- package/dist/elements/overview/pipeline-graph/table.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/tools.d.ts +5 -0
- package/dist/elements/overview/pipeline-graph/tools.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/tools.js +48 -0
- package/dist/elements/overview/pipeline-graph/tools.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/words.d.ts +45 -0
- package/dist/elements/overview/pipeline-graph/words.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/words.js +108 -0
- package/dist/elements/overview/pipeline-graph/words.js.map +1 -0
- package/dist/elements/overview/place-card.d.ts +36 -0
- package/dist/elements/overview/place-card.d.ts.map +1 -0
- package/dist/elements/overview/place-card.js +68 -0
- package/dist/elements/overview/place-card.js.map +1 -0
- package/dist/elements/overview/timeline-model.d.ts +44 -0
- package/dist/elements/overview/timeline-model.d.ts.map +1 -0
- package/dist/elements/overview/timeline-model.js +53 -0
- package/dist/elements/overview/timeline-model.js.map +1 -0
- package/dist/elements/shared/ca-count.d.ts +17 -0
- package/dist/elements/shared/ca-count.d.ts.map +1 -0
- package/dist/elements/shared/ca-count.js +59 -0
- package/dist/elements/shared/ca-count.js.map +1 -0
- package/dist/elements/shared/ca-definition.d.ts +26 -0
- package/dist/elements/shared/ca-definition.d.ts.map +1 -0
- package/dist/elements/shared/ca-definition.js +202 -0
- package/dist/elements/shared/ca-definition.js.map +1 -0
- package/dist/elements/shared/ca-elapsed.d.ts +14 -0
- package/dist/elements/shared/ca-elapsed.d.ts.map +1 -0
- package/dist/elements/shared/ca-elapsed.js +33 -0
- package/dist/elements/shared/ca-elapsed.js.map +1 -0
- package/dist/elements/shared/ca-json-tree.d.ts +16 -0
- package/dist/elements/shared/ca-json-tree.d.ts.map +1 -0
- package/dist/elements/shared/ca-json-tree.js +52 -0
- package/dist/elements/shared/ca-json-tree.js.map +1 -0
- package/dist/elements/shared/ca-markdown.d.ts +19 -0
- package/dist/elements/shared/ca-markdown.d.ts.map +1 -0
- package/dist/elements/shared/ca-markdown.js +59 -0
- package/dist/elements/shared/ca-markdown.js.map +1 -0
- package/dist/elements/shared/contract-parts.d.ts +35 -0
- package/dist/elements/shared/contract-parts.d.ts.map +1 -0
- package/dist/elements/shared/contract-parts.js +151 -0
- package/dist/elements/shared/contract-parts.js.map +1 -0
- package/dist/elements/shared/fact-line.d.ts +4 -0
- package/dist/elements/shared/fact-line.d.ts.map +1 -0
- package/dist/elements/shared/fact-line.js +8 -0
- package/dist/elements/shared/fact-line.js.map +1 -0
- package/dist/elements/shared/file-card.d.ts +17 -0
- package/dist/elements/shared/file-card.d.ts.map +1 -0
- package/dist/elements/shared/file-card.js +37 -0
- package/dist/elements/shared/file-card.js.map +1 -0
- package/dist/elements/shared/prompt-text.d.ts +5 -0
- package/dist/elements/shared/prompt-text.d.ts.map +1 -0
- package/dist/elements/shared/prompt-text.js +13 -0
- package/dist/elements/shared/prompt-text.js.map +1 -0
- package/dist/elements/shared/task-chip.d.ts +10 -0
- package/dist/elements/shared/task-chip.d.ts.map +1 -0
- package/dist/elements/shared/task-chip.js +19 -0
- package/dist/elements/shared/task-chip.js.map +1 -0
- package/dist/elements/shell/ca-clock.d.ts +13 -0
- package/dist/elements/shell/ca-clock.d.ts.map +1 -0
- package/dist/elements/shell/ca-clock.js +30 -0
- package/dist/elements/shell/ca-clock.js.map +1 -0
- package/dist/elements/shell/ca-hosts.d.ts +21 -0
- package/dist/elements/shell/ca-hosts.d.ts.map +1 -0
- package/dist/elements/shell/ca-hosts.js +97 -0
- package/dist/elements/shell/ca-hosts.js.map +1 -0
- package/dist/elements/shell/ca-monitor.d.ts +180 -0
- package/dist/elements/shell/ca-monitor.d.ts.map +1 -0
- package/dist/elements/shell/ca-monitor.js +547 -0
- package/dist/elements/shell/ca-monitor.js.map +1 -0
- package/dist/elements/shell/ca-run-picker.d.ts +71 -0
- package/dist/elements/shell/ca-run-picker.d.ts.map +1 -0
- package/dist/elements/shell/ca-run-picker.js +313 -0
- package/dist/elements/shell/ca-run-picker.js.map +1 -0
- package/dist/elements/shell/ca-theme-switch.d.ts +36 -0
- package/dist/elements/shell/ca-theme-switch.d.ts.map +1 -0
- package/dist/elements/shell/ca-theme-switch.js +186 -0
- package/dist/elements/shell/ca-theme-switch.js.map +1 -0
- package/dist/elements/shell/ca-toasts.d.ts +23 -0
- package/dist/elements/shell/ca-toasts.d.ts.map +1 -0
- package/dist/elements/shell/ca-toasts.js +88 -0
- package/dist/elements/shell/ca-toasts.js.map +1 -0
- package/dist/elements/shell/header.d.ts +13 -0
- package/dist/elements/shell/header.d.ts.map +1 -0
- package/dist/elements/shell/header.js +38 -0
- package/dist/elements/shell/header.js.map +1 -0
- package/dist/elements/shell/styles.d.ts +2 -0
- package/dist/elements/shell/styles.d.ts.map +1 -0
- package/dist/elements/shell/styles.js +72 -0
- package/dist/elements/shell/styles.js.map +1 -0
- package/dist/elements/shell/tabs.d.ts +32 -0
- package/dist/elements/shell/tabs.d.ts.map +1 -0
- package/dist/elements/shell/tabs.js +125 -0
- package/dist/elements/shell/tabs.js.map +1 -0
- package/dist/elements/shell/views.d.ts +27 -0
- package/dist/elements/shell/views.d.ts.map +1 -0
- package/dist/elements/shell/views.js +55 -0
- package/dist/elements/shell/views.js.map +1 -0
- package/dist/elements/task/ca-task-view.d.ts +55 -0
- package/dist/elements/task/ca-task-view.d.ts.map +1 -0
- package/dist/elements/task/ca-task-view.js +199 -0
- package/dist/elements/task/ca-task-view.js.map +1 -0
- package/dist/elements/task/ca-transcript.d.ts +74 -0
- package/dist/elements/task/ca-transcript.d.ts.map +1 -0
- package/dist/elements/task/ca-transcript.js +241 -0
- package/dist/elements/task/ca-transcript.js.map +1 -0
- package/dist/elements/task/context.d.ts +57 -0
- package/dist/elements/task/context.d.ts.map +1 -0
- package/dist/elements/task/context.js +61 -0
- package/dist/elements/task/context.js.map +1 -0
- package/dist/elements/task/header.d.ts +9 -0
- package/dist/elements/task/header.d.ts.map +1 -0
- package/dist/elements/task/header.js +287 -0
- package/dist/elements/task/header.js.map +1 -0
- package/dist/elements/task/index.d.ts +3 -0
- package/dist/elements/task/index.d.ts.map +1 -0
- package/dist/elements/task/index.js +3 -0
- package/dist/elements/task/index.js.map +1 -0
- package/dist/elements/task/inputs.d.ts +28 -0
- package/dist/elements/task/inputs.d.ts.map +1 -0
- package/dist/elements/task/inputs.js +27 -0
- package/dist/elements/task/inputs.js.map +1 -0
- package/dist/elements/task/panes/definition.d.ts +5 -0
- package/dist/elements/task/panes/definition.d.ts.map +1 -0
- package/dist/elements/task/panes/definition.js +5 -0
- package/dist/elements/task/panes/definition.js.map +1 -0
- package/dist/elements/task/panes/io.d.ts +8 -0
- package/dist/elements/task/panes/io.d.ts.map +1 -0
- package/dist/elements/task/panes/io.js +184 -0
- package/dist/elements/task/panes/io.js.map +1 -0
- package/dist/elements/task/panes/transcript.d.ts +5 -0
- package/dist/elements/task/panes/transcript.d.ts.map +1 -0
- package/dist/elements/task/panes/transcript.js +29 -0
- package/dist/elements/task/panes/transcript.js.map +1 -0
- package/dist/elements/task/rounds.d.ts +14 -0
- package/dist/elements/task/rounds.d.ts.map +1 -0
- package/dist/elements/task/rounds.js +59 -0
- package/dist/elements/task/rounds.js.map +1 -0
- package/dist/elements/task/styles.d.ts +2 -0
- package/dist/elements/task/styles.d.ts.map +1 -0
- package/dist/elements/task/styles.js +66 -0
- package/dist/elements/task/styles.js.map +1 -0
- package/dist/elements/task/transcript-model.d.ts +106 -0
- package/dist/elements/task/transcript-model.d.ts.map +1 -0
- package/dist/elements/task/transcript-model.js +280 -0
- package/dist/elements/task/transcript-model.js.map +1 -0
- package/dist/elements/task/who.d.ts +5 -0
- package/dist/elements/task/who.d.ts.map +1 -0
- package/dist/elements/task/who.js +30 -0
- package/dist/elements/task/who.js.map +1 -0
- package/dist/elements/trends/ca-trends.d.ts +55 -0
- package/dist/elements/trends/ca-trends.d.ts.map +1 -0
- package/dist/elements/trends/ca-trends.js +213 -0
- package/dist/elements/trends/ca-trends.js.map +1 -0
- package/dist/events.d.ts +107 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +5 -0
- package/dist/events.js.map +1 -0
- package/dist/i18n.d.ts +16 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +48 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/clock.d.ts +20 -0
- package/dist/lib/clock.d.ts.map +1 -0
- package/dist/lib/clock.js +45 -0
- package/dist/lib/clock.js.map +1 -0
- package/dist/lib/format.d.ts +35 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +117 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/highlight.d.ts +5 -0
- package/dist/lib/highlight.d.ts.map +1 -0
- package/dist/lib/highlight.js +86 -0
- package/dist/lib/highlight.js.map +1 -0
- package/dist/lib/labels.d.ts +103 -0
- package/dist/lib/labels.d.ts.map +1 -0
- package/dist/lib/labels.js +249 -0
- package/dist/lib/labels.js.map +1 -0
- package/dist/lib/markdown.d.ts +13 -0
- package/dist/lib/markdown.d.ts.map +1 -0
- package/dist/lib/markdown.js +118 -0
- package/dist/lib/markdown.js.map +1 -0
- package/dist/lib/memory.d.ts +27 -0
- package/dist/lib/memory.d.ts.map +1 -0
- package/dist/lib/memory.js +117 -0
- package/dist/lib/memory.js.map +1 -0
- package/dist/lib/quota-format.d.ts +28 -0
- package/dist/lib/quota-format.d.ts.map +1 -0
- package/dist/lib/quota-format.js +67 -0
- package/dist/lib/quota-format.js.map +1 -0
- package/dist/lib/scroll.d.ts +16 -0
- package/dist/lib/scroll.d.ts.map +1 -0
- package/dist/lib/scroll.js +70 -0
- package/dist/lib/scroll.js.map +1 -0
- package/dist/lib/status.d.ts +25 -0
- package/dist/lib/status.d.ts.map +1 -0
- package/dist/lib/status.js +40 -0
- package/dist/lib/status.js.map +1 -0
- package/dist/lib/tone.d.ts +29 -0
- package/dist/lib/tone.d.ts.map +1 -0
- package/dist/lib/tone.js +97 -0
- package/dist/lib/tone.js.map +1 -0
- package/dist/lib/trends.d.ts +15 -0
- package/dist/lib/trends.d.ts.map +1 -0
- package/dist/lib/trends.js +36 -0
- package/dist/lib/trends.js.map +1 -0
- package/dist/locales/codes.d.ts +14 -0
- package/dist/locales/codes.d.ts.map +1 -0
- package/dist/locales/codes.js +21 -0
- package/dist/locales/codes.js.map +1 -0
- package/dist/locales/ja.d.ts +761 -0
- package/dist/locales/ja.d.ts.map +1 -0
- package/dist/locales/ja.js +767 -0
- package/dist/locales/ja.js.map +1 -0
- package/dist/route.d.ts +46 -0
- package/dist/route.d.ts.map +1 -0
- package/dist/route.js +102 -0
- package/dist/route.js.map +1 -0
- package/dist/router.d.ts +23 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +55 -0
- package/dist/router.js.map +1 -0
- package/dist/styles/base.d.ts +11 -0
- package/dist/styles/base.d.ts.map +1 -0
- package/dist/styles/base.js +241 -0
- package/dist/styles/base.js.map +1 -0
- package/dist/styles/chips.d.ts +2 -0
- package/dist/styles/chips.d.ts.map +1 -0
- package/dist/styles/chips.js +18 -0
- package/dist/styles/chips.js.map +1 -0
- package/dist/styles/executor-icon.d.ts +3 -0
- package/dist/styles/executor-icon.d.ts.map +1 -0
- package/dist/styles/executor-icon.js +9 -0
- package/dist/styles/executor-icon.js.map +1 -0
- package/dist/styles/facts.d.ts +2 -0
- package/dist/styles/facts.d.ts.map +1 -0
- package/dist/styles/facts.js +7 -0
- package/dist/styles/facts.js.map +1 -0
- package/dist/styles/index.d.ts +17 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +16 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/layout.d.ts +2 -0
- package/dist/styles/layout.d.ts.map +1 -0
- package/dist/styles/layout.js +30 -0
- package/dist/styles/layout.js.map +1 -0
- package/dist/styles/legend.d.ts +2 -0
- package/dist/styles/legend.d.ts.map +1 -0
- package/dist/styles/legend.js +8 -0
- package/dist/styles/legend.js.map +1 -0
- package/dist/styles/meter.d.ts +3 -0
- package/dist/styles/meter.d.ts.map +1 -0
- package/dist/styles/meter.js +9 -0
- package/dist/styles/meter.js.map +1 -0
- package/dist/styles/motion.d.ts +2 -0
- package/dist/styles/motion.d.ts.map +1 -0
- package/dist/styles/motion.js +27 -0
- package/dist/styles/motion.js.map +1 -0
- package/dist/styles/prose.d.ts +3 -0
- package/dist/styles/prose.d.ts.map +1 -0
- package/dist/styles/prose.js +59 -0
- package/dist/styles/prose.js.map +1 -0
- package/dist/styles/reset.d.ts +2 -0
- package/dist/styles/reset.d.ts.map +1 -0
- package/dist/styles/reset.js +13 -0
- package/dist/styles/reset.js.map +1 -0
- package/dist/styles/status.d.ts +2 -0
- package/dist/styles/status.d.ts.map +1 -0
- package/dist/styles/status.js +52 -0
- package/dist/styles/status.js.map +1 -0
- package/dist/styles/text.d.ts +2 -0
- package/dist/styles/text.d.ts.map +1 -0
- package/dist/styles/text.js +21 -0
- package/dist/styles/text.js.map +1 -0
- package/dist/styles/theme-sheet.d.ts +12 -0
- package/dist/styles/theme-sheet.d.ts.map +1 -0
- package/dist/styles/theme-sheet.js +24 -0
- package/dist/styles/theme-sheet.js.map +1 -0
- package/dist/styles/themes.d.ts +75 -0
- package/dist/styles/themes.d.ts.map +1 -0
- package/dist/styles/themes.js +452 -0
- package/dist/styles/themes.js.map +1 -0
- package/dist/styles/tokens.d.ts +8 -0
- package/dist/styles/tokens.d.ts.map +1 -0
- package/dist/styles/tokens.js +32 -0
- package/dist/styles/tokens.js.map +1 -0
- package/dist/themes/boot.d.ts +7 -0
- package/dist/themes/boot.d.ts.map +1 -0
- package/dist/themes/boot.js +14 -0
- package/dist/themes/boot.js.map +1 -0
- package/dist/themes/choice.d.ts +16 -0
- package/dist/themes/choice.d.ts.map +1 -0
- package/dist/themes/choice.js +45 -0
- package/dist/themes/choice.js.map +1 -0
- package/dist/themes/data.d.ts +42 -0
- package/dist/themes/data.d.ts.map +1 -0
- package/dist/themes/data.js +356 -0
- package/dist/themes/data.js.map +1 -0
- package/dist/themes/index.d.ts +5 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +8 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/sheet.d.ts +12 -0
- package/dist/themes/sheet.d.ts.map +1 -0
- package/dist/themes/sheet.js +24 -0
- package/dist/themes/sheet.js.map +1 -0
- package/dist/themes/tokens-list.d.ts +15 -0
- package/dist/themes/tokens-list.d.ts.map +1 -0
- package/dist/themes/tokens-list.js +62 -0
- package/dist/themes/tokens-list.js.map +1 -0
- package/dist/words/api-error.d.ts +4 -0
- package/dist/words/api-error.d.ts.map +1 -0
- package/dist/words/api-error.js +13 -0
- package/dist/words/api-error.js.map +1 -0
- package/dist/words/attempts.d.ts +17 -0
- package/dist/words/attempts.d.ts.map +1 -0
- package/dist/words/attempts.js +26 -0
- package/dist/words/attempts.js.map +1 -0
- package/dist/words/causes.d.ts +33 -0
- package/dist/words/causes.d.ts.map +1 -0
- package/dist/words/causes.js +58 -0
- package/dist/words/causes.js.map +1 -0
- package/dist/words/changes.d.ts +9 -0
- package/dist/words/changes.d.ts.map +1 -0
- package/dist/words/changes.js +21 -0
- package/dist/words/changes.js.map +1 -0
- package/dist/words/claims.d.ts +9 -0
- package/dist/words/claims.d.ts.map +1 -0
- package/dist/words/claims.js +12 -0
- package/dist/words/claims.js.map +1 -0
- package/dist/words/context.d.ts +18 -0
- package/dist/words/context.d.ts.map +1 -0
- package/dist/words/context.js +39 -0
- package/dist/words/context.js.map +1 -0
- package/dist/words/contract.d.ts +25 -0
- package/dist/words/contract.d.ts.map +1 -0
- package/dist/words/contract.js +52 -0
- package/dist/words/contract.js.map +1 -0
- package/dist/words/credential.d.ts +5 -0
- package/dist/words/credential.d.ts.map +1 -0
- package/dist/words/credential.js +7 -0
- package/dist/words/credential.js.map +1 -0
- package/dist/words/executor.d.ts +12 -0
- package/dist/words/executor.d.ts.map +1 -0
- package/dist/words/executor.js +20 -0
- package/dist/words/executor.js.map +1 -0
- package/dist/words/export.d.ts +8 -0
- package/dist/words/export.d.ts.map +1 -0
- package/dist/words/export.js +17 -0
- package/dist/words/export.js.map +1 -0
- package/dist/words/format.d.ts +36 -0
- package/dist/words/format.d.ts.map +1 -0
- package/dist/words/format.js +109 -0
- package/dist/words/format.js.map +1 -0
- package/dist/words/hops.d.ts +12 -0
- package/dist/words/hops.d.ts.map +1 -0
- package/dist/words/hops.js +27 -0
- package/dist/words/hops.js.map +1 -0
- package/dist/words/hosts.d.ts +18 -0
- package/dist/words/hosts.d.ts.map +1 -0
- package/dist/words/hosts.js +22 -0
- package/dist/words/hosts.js.map +1 -0
- package/dist/words/index.d.ts +27 -0
- package/dist/words/index.d.ts.map +1 -0
- package/dist/words/index.js +31 -0
- package/dist/words/index.js.map +1 -0
- package/dist/words/models.d.ts +10 -0
- package/dist/words/models.d.ts.map +1 -0
- package/dist/words/models.js +45 -0
- package/dist/words/models.js.map +1 -0
- package/dist/words/outcome.d.ts +14 -0
- package/dist/words/outcome.d.ts.map +1 -0
- package/dist/words/outcome.js +58 -0
- package/dist/words/outcome.js.map +1 -0
- package/dist/words/panels.d.ts +11 -0
- package/dist/words/panels.d.ts.map +1 -0
- package/dist/words/panels.js +50 -0
- package/dist/words/panels.js.map +1 -0
- package/dist/words/passes.d.ts +11 -0
- package/dist/words/passes.d.ts.map +1 -0
- package/dist/words/passes.js +13 -0
- package/dist/words/passes.js.map +1 -0
- package/dist/words/preflight.d.ts +28 -0
- package/dist/words/preflight.d.ts.map +1 -0
- package/dist/words/preflight.js +30 -0
- package/dist/words/preflight.js.map +1 -0
- package/dist/words/priority.d.ts +5 -0
- package/dist/words/priority.d.ts.map +1 -0
- package/dist/words/priority.js +7 -0
- package/dist/words/priority.js.map +1 -0
- package/dist/words/prompt.d.ts +10 -0
- package/dist/words/prompt.d.ts.map +1 -0
- package/dist/words/prompt.js +17 -0
- package/dist/words/prompt.js.map +1 -0
- package/dist/words/quota.d.ts +35 -0
- package/dist/words/quota.d.ts.map +1 -0
- package/dist/words/quota.js +102 -0
- package/dist/words/quota.js.map +1 -0
- package/dist/words/rests.d.ts +26 -0
- package/dist/words/rests.d.ts.map +1 -0
- package/dist/words/rests.js +77 -0
- package/dist/words/rests.js.map +1 -0
- package/dist/words/rounds.d.ts +14 -0
- package/dist/words/rounds.d.ts.map +1 -0
- package/dist/words/rounds.js +60 -0
- package/dist/words/rounds.js.map +1 -0
- package/dist/words/row-extras.d.ts +7 -0
- package/dist/words/row-extras.d.ts.map +1 -0
- package/dist/words/row-extras.js +26 -0
- package/dist/words/row-extras.js.map +1 -0
- package/dist/words/run-line.d.ts +40 -0
- package/dist/words/run-line.d.ts.map +1 -0
- package/dist/words/run-line.js +66 -0
- package/dist/words/run-line.js.map +1 -0
- package/dist/words/stop.d.ts +6 -0
- package/dist/words/stop.d.ts.map +1 -0
- package/dist/words/stop.js +69 -0
- package/dist/words/stop.js.map +1 -0
- package/dist/words/table.d.ts +4 -0
- package/dist/words/table.d.ts.map +1 -0
- package/dist/words/table.js +8 -0
- package/dist/words/table.js.map +1 -0
- package/dist/words/task-definition.d.ts +23 -0
- package/dist/words/task-definition.d.ts.map +1 -0
- package/dist/words/task-definition.js +27 -0
- package/dist/words/task-definition.js.map +1 -0
- package/dist/words/time-box.d.ts +8 -0
- package/dist/words/time-box.d.ts.map +1 -0
- package/dist/words/time-box.js +12 -0
- package/dist/words/time-box.js.map +1 -0
- package/dist/words/trends.d.ts +86 -0
- package/dist/words/trends.d.ts.map +1 -0
- package/dist/words/trends.js +104 -0
- package/dist/words/trends.js.map +1 -0
- package/dist/words/units.d.ts +9 -0
- package/dist/words/units.d.ts.map +1 -0
- package/dist/words/units.js +12 -0
- package/dist/words/units.js.map +1 -0
- package/docs/embed.md +118 -0
- package/docs/events.md +38 -0
- package/docs/examples/embed.html +31 -0
- package/docs/examples/journal.ts +32 -0
- package/docs/examples/live-transcript.ts +22 -0
- package/docs/examples/vite/index.html +30 -0
- package/docs/examples/vite/main.ts +23 -0
- package/docs/languages.md +48 -0
- package/docs/live-data.md +17 -0
- package/docs/theming.md +21 -0
- package/docs/tsconfig.json +14 -0
- package/package.json +131 -4
- package/src/adapters/check-rows.ts +78 -0
- package/src/adapters/filters.ts +76 -0
- package/src/adapters/graph/compound.ts +359 -0
- package/src/adapters/graph/flow-index.ts +154 -0
- package/src/adapters/graph/highlight.ts +40 -0
- package/src/adapters/graph/input.ts +236 -0
- package/src/adapters/graph/layer.ts +92 -0
- package/src/adapters/graph/matrix.ts +133 -0
- package/src/adapters/graph/plans.fixture.ts +194 -0
- package/src/adapters/graph/project.ts +358 -0
- package/src/adapters/graph/selection.ts +54 -0
- package/src/adapters/graph/states.ts +10 -0
- package/src/adapters/graph/types.ts +148 -0
- package/src/adapters/graph/words.ts +146 -0
- package/src/adapters/index.ts +22 -0
- package/src/adapters/journal-columns.ts +200 -0
- package/src/adapters/kpi-tiles.ts +211 -0
- package/src/adapters/lanes.ts +98 -0
- package/src/adapters/model-shares.ts +62 -0
- package/src/adapters/panel-body.ts +74 -0
- package/src/adapters/preflight.ts +27 -0
- package/src/adapters/task-columns.ts +120 -0
- package/src/adapters/transcript/index.ts +14 -0
- package/src/adapters/transcript/model.ts +156 -0
- package/src/adapters/transcript/rounds.ts +86 -0
- package/src/adapters/transcript/sections.ts +82 -0
- package/src/adapters/transcript/web.ts +40 -0
- package/src/adapters/transcript/who.ts +53 -0
- package/src/adapters/trends.ts +337 -0
- package/src/controllers/locale.ts +47 -0
- package/src/controllers/shortcuts.ts +69 -0
- package/src/controllers/stream.ts +103 -0
- package/src/controllers/task-detail.ts +54 -0
- package/src/controllers/theme.ts +73 -0
- package/src/core/events.ts +120 -0
- package/src/core/i18n.ts +76 -0
- package/src/core/index.ts +6 -0
- package/src/core/memory.ts +177 -0
- package/src/core/scroll.ts +73 -0
- package/src/core/view-route.ts +177 -0
- package/src/core/view-router.ts +66 -0
- package/src/define/all.ts +13 -0
- package/src/define/contracts.ts +2 -0
- package/src/define/definitions.ts +3 -0
- package/src/define/journal-table.ts +2 -0
- package/src/define/kpis.ts +2 -0
- package/src/define/monitor.ts +2 -0
- package/src/define/overview.ts +2 -0
- package/src/define/pipeline-graph.ts +2 -0
- package/src/define/procs.ts +3 -0
- package/src/define/task-table.ts +2 -0
- package/src/define/task-view.ts +2 -0
- package/src/define/timeline.ts +2 -0
- package/src/define/transcript.ts +2 -0
- package/src/elements/lists/ca-contracts.ts +204 -0
- package/src/elements/lists/ca-definitions.ts +170 -0
- package/src/elements/lists/ca-journal-table.ts +141 -0
- package/src/elements/lists/ca-panel-body.ts +139 -0
- package/src/elements/lists/ca-panel-view.ts +50 -0
- package/src/elements/lists/ca-proc-tree.ts +57 -0
- package/src/elements/lists/ca-procs-view.ts +89 -0
- package/src/elements/lists/ca-task-table.ts +94 -0
- package/src/elements/lists/index.ts +8 -0
- package/src/elements/overview/ca-kpis.ts +51 -0
- package/src/elements/overview/ca-model-usage.ts +113 -0
- package/src/elements/overview/ca-overview.ts +492 -0
- package/src/elements/overview/ca-pipeline-graph.ts +617 -0
- package/src/elements/overview/ca-quota.ts +164 -0
- package/src/elements/overview/ca-run-driver.ts +140 -0
- package/src/elements/overview/ca-spend-breakdown.ts +107 -0
- package/src/elements/overview/ca-timeline.ts +57 -0
- package/src/elements/overview/ca-workers.ts +82 -0
- package/src/elements/overview/index.ts +9 -0
- package/src/elements/overview/pipeline-graph/actions.ts +45 -0
- package/src/elements/overview/pipeline-graph/crumbs.ts +75 -0
- package/src/elements/overview/pipeline-graph/host.ts +26 -0
- package/src/elements/overview/pipeline-graph/inspector.ts +104 -0
- package/src/elements/overview/pipeline-graph/outline.ts +150 -0
- package/src/elements/overview/pipeline-graph/strings.ts +53 -0
- package/src/elements/overview/pipeline-graph/styles.ts +97 -0
- package/src/elements/shared/ca-definition.ts +206 -0
- package/src/elements/shared/contract-parts.ts +158 -0
- package/src/elements/shared/file-card.ts +49 -0
- package/src/elements/shared/prompt-text.ts +13 -0
- package/src/elements/shared/task-chip.ts +18 -0
- package/src/elements/shell/ca-clock.ts +27 -0
- package/src/elements/shell/ca-hosts.ts +93 -0
- package/src/elements/shell/ca-monitor.ts +526 -0
- package/src/elements/shell/ca-run-picker.ts +284 -0
- package/src/elements/shell/ca-theme-switch.ts +170 -0
- package/src/elements/shell/ca-toasts.ts +100 -0
- package/src/elements/shell/header.ts +45 -0
- package/src/elements/shell/styles.ts +72 -0
- package/src/elements/shell/tabs.ts +143 -0
- package/src/elements/shell/views.ts +67 -0
- package/src/elements/task/ca-task-view.ts +157 -0
- package/src/elements/task/ca-transcript.ts +214 -0
- package/src/elements/task/context.ts +105 -0
- package/src/elements/task/header.ts +292 -0
- package/src/elements/task/index.ts +2 -0
- package/src/elements/task/inputs.ts +46 -0
- package/src/elements/task/panes/definition.ts +7 -0
- package/src/elements/task/panes/io.ts +190 -0
- package/src/elements/task/panes/transcript.ts +29 -0
- package/src/elements/task/styles.ts +66 -0
- package/src/elements/trends/ca-trends.ts +204 -0
- package/src/index.ts +23 -0
- package/src/lib/tone.ts +109 -0
- package/src/lib/trends.ts +44 -0
- package/src/locales/codes.ts +23 -0
- package/src/locales/ja.ts +771 -0
- package/src/words/api-error.ts +17 -0
- package/src/words/attempts.ts +28 -0
- package/src/words/causes.ts +67 -0
- package/src/words/changes.ts +27 -0
- package/src/words/claims.ts +16 -0
- package/src/words/context.ts +47 -0
- package/src/words/contract.ts +63 -0
- package/src/words/credential.ts +8 -0
- package/src/words/executor.ts +22 -0
- package/src/words/export.ts +22 -0
- package/src/words/format.ts +107 -0
- package/src/words/hops.ts +30 -0
- package/src/words/hosts.ts +37 -0
- package/src/words/index.ts +30 -0
- package/src/words/models.ts +50 -0
- package/src/words/outcome.ts +61 -0
- package/src/words/panels.ts +53 -0
- package/src/words/passes.ts +18 -0
- package/src/words/preflight.ts +53 -0
- package/src/words/priority.ts +8 -0
- package/src/words/prompt.ts +20 -0
- package/src/words/quota.ts +108 -0
- package/src/words/rests.ts +96 -0
- package/src/words/rounds.ts +56 -0
- package/src/words/row-extras.ts +24 -0
- package/src/words/run-line.ts +77 -0
- package/src/words/stop.ts +65 -0
- package/src/words/table.ts +10 -0
- package/src/words/task-definition.ts +37 -0
- package/src/words/time-box.ts +21 -0
- package/src/words/trends.ts +118 -0
|
@@ -0,0 +1,985 @@
|
|
|
1
|
+
var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n=new Set([`launch`,`message_update`,`tool_execution_start`,`tool_execution_update`,`tool_execution_end`,`acall`,`aresult`,`message_start`,`message_end`,`turn_end`,`notice`,`auto_retry_start`]);function r(e){return n.has(e.type)?e:null}var i=class extends Error{constructor(e,t,n=0,r=``){super(`No JSON answer from ${e}: ${t} ${n} ${r}`.trim()),this.url=e,this.failure=t,this.status=n,this.type=r,this.name=`ApiError`}};function a(e={}){let t=(e.baseUrl??``).replace(/\/$/,``),n=(t||globalThis.location?.origin||``).replace(/\/$/,``),r=e.fetch??globalThis.fetch;async function a(e,t){let{path:a={},query:o={}}=t??{},s=n+e.replace(/\{(\w+)\}/g,(e,t)=>t in a?encodeURIComponent(a[t]):e),c=Object.entries(o).filter(([,e])=>e!=null).map(([e,t])=>`${e}=${encodeURIComponent(t)}`).join(`&`),l=c?`${s}?${c}`:s,u;try{u=await r(new Request(l))}catch{throw new i(l,`network`)}let{status:d,ok:f}=u,p=(u.headers.get(`Content-Type`)??``).split(`;`)[0].trim().toLowerCase();try{if(f)return await u.json()}catch{}throw new i(l,f?`not-json`:`status`,d,p)}return{baseUrl:t,info:()=>a(`/api/info`),runs:()=>a(`/api/runs`),hosts:()=>a(`/api/hosts`),journal:(e,t=0)=>a(`/api/runs/{run}/journal`,{path:{run:e},query:{since:t}}),definitions:e=>a(`/api/runs/{run}/definitions`,{path:{run:e}}),task:(e,t)=>a(`/api/runs/{run}/task/{key}`,{path:{run:e,key:t}}),stream:(e,t,n=0)=>a(`/api/runs/{run}/stream/{key}`,{path:{run:e,key:t},query:{since:n}}),panel:(e,t)=>a(`/api/runs/{run}/panels/{name}`,{path:{run:e,name:t}}),trends:(e={})=>a(`/api/trends`,{query:{...e}}),trendsPanel:(e,t={})=>a(`/api/trends/panels/{name}`,{path:{name:e},query:{...t}})}}var o=[`journal`,`procs`,`plan`,`outputs`,`cursor`,`ready`];function s(e,t,n,r){let i=new(r.EventSource??globalThis.EventSource)(e);i.onopen=()=>n.open?.(),i.onerror=()=>n.error?.();for(let e of t)i.addEventListener(e,t=>{n.message({event:e,data:JSON.parse(t.data)})});return()=>i.close()}var c=encodeURIComponent,l=e=>(e.baseUrl??``).replace(/\/$/,``);function u(e,t){let n=t?.flow_call;return n?e?.flow_calls?.find(e=>e.id===n)?.function??``:``}var d=e=>e.ok,f=e=>e.stop!==`invalid_input`&&e.stop!==`skipped`;function p(e,t){if(e?.state===`running`)return`running`;let n=t[t.length-1];return n?n.stop===`skipped`?`skipped`:n.stop===`invalid_input`?`not_started`:n.stop===`partial`?`partial`:d(n)?t.some(e=>f(e)&&!d(e))?`recovered`:`done`:`failed`:e?.state===`blocked`?`not_started`:`waiting`}function m(e){let t=new Set,n=[];for(let r of e)f(r)&&(t.has(r.key)&&n.push(r),d(r)||t.add(r.key));return n}function h(e){switch(e){case`blocked`:return`not_started`;case`pending`:return`waiting`;default:return e}}var g=e=>e===`done`||e===`recovered`||e===`partial`||e===`skipped`;function _(e){let t=new Map;for(let n of e.values())n.outcome===`failed`&&t.set(n.key,{task:n,stopped:[]});let n=[];for(let r of e.values()){if(r.outcome!==`not_started`)continue;let e=r.cause?t.get(r.cause):void 0;e?e.stopped.push(r):n.push(r)}let r=e=>e.attempts[e.attempts.length-1]?.ts??``;return{failed:[...t.values()].sort((e,t)=>r(t.task).localeCompare(r(e.task))),notStarted:n,partial:[...e.values()].filter(e=>e.outcome===`partial`),recovered:[...e.values()].filter(e=>e.outcome===`recovered`)}}function v(e){let t=Array.isArray(e?.flow)?e.flow:[];for(let e=t.length-1;e>=0;e--){let n=t[e]?.loops??[],r=n[n.length-1];if(r)return typeof r.pass==`number`&&r.pass>=1?r.pass:1}return null}function y(e,t){let n=new Map(t.nodes.map(e=>[e.key,e]));return[...e.values()].map(t=>{let r=t.attempts[t.attempts.length-1],i=n.get(t.key);return{...t,pass:v(i),wall_s:t.tries.reduce((e,t)=>e+(t.wall_s||0),0),last_ts:r?.ts??``,last_stop:r?.stop??``,waits_for:t.outcome===`waiting`?(i?.after??[]).filter(t=>!g(e.get(t)?.outcome??`waiting`)):[],claims:i?.claims??[],priority:i?.priority??0}})}var b={nodes:[],groups:[]},x=new WeakMap;function S(e,t=b){let n=t??b,r=x.get(e);r||x.set(e,r=new WeakMap);let i=r.get(n);return i||r.set(n,i=function(e,t){let n=function(e,t){let n=new Map;for(let t of e){let e=n.get(t.key);e||n.set(t.key,e=[]),e.push(t)}let r=new Map(t.nodes.map(e=>[e.key,e])),i=[...new Set([...t.nodes.map(e=>e.key),...n.keys()])],a=new Map;for(let e of i){let i=r.get(e),o=n.get(e)??[],s=o[0];a.set(e,{key:e,kind:i?.kind??s?.kind??``,unit:i?.unit??s?.unit??``,executor:i?.executor??s?.executor??`agent`,outcome:p(i,o),attempts:o,tries:o.filter(f),cause:null,deferred:i?.deferred??``,deferredCause:i?.deferred_cause??null,deferredIn:u(t,i?.deferred_cause)})}let o=(e,t)=>{for(let n of r.get(e)?.after??[]){if(t.has(n))continue;t.add(n);let e=a.get(n);if(e?.outcome===`failed`)return n;if(e?.outcome===`not_started`){let e=o(n,t);if(e)return e}}return null};for(let e of a.values())e.outcome===`not_started`&&(e.cause=o(e.key,new Set));return a}(e,t),r=function(e){let t={done:0,recovered:0,partial:0,failed:0,not_started:0,running:0,waiting:0,skipped:0,total:0};for(let n of e.values())t[n.outcome]++,t.total++;return t}(n);return{outcomes:n,rows:y(n,t),counts:{...r,doneTotal:r.done+r.recovered,finished:r.done+r.recovered+r.partial+r.skipped},problems:_(n),kinds:[...new Set([...n.values()].map(e=>e.kind))].sort(),tries:ee(e)}}(e,n)),i}function ee(e){let t=e.filter(f).length;return{tries:t,notStarted:e.length-t}}function te(e){let t=(...t)=>e.nodes.filter(e=>t.includes(e.state)).length;return{done:t(`done`),partial:t(`partial`),skipped:t(`skipped`),failed:t(`failed`),notStarted:t(`blocked`),left:t(`pending`,`running`)}}function ne(e){let t=Date.parse(e?.started_at??``),n=Date.parse(e?.last_ts??``);return Number.isNaN(t)||Number.isNaN(n)?null:Math.max(0,(n-t)/1e3)}function re(e,t=!1){return t||e?.running?`running`:e?.unresponsive?`unresponsive`:`stopped`}var ie=(e,t)=>t?.host_id?e?.find(e=>e.host_id===t.host_id):void 0;function ae(e){let t=e.run.length-(e.host_id?.length??0)-1;return e.host_id&&t>0&&e.run.endsWith(`@${e.host_id}`)?e.run.slice(0,t):e.run}var oe=[`running`,`unresponsive`,`stopped`];function se(e,t=[]){let n=[...new Set(e.map(e=>e.host_id??``))],r=t.map(e=>e.host_id),i=e=>oe.indexOf(re(e));return[...r.filter(e=>n.includes(e)),...n.filter(e=>!r.includes(e)).sort()].map(n=>({hostId:n,host:t.find(e=>e.host_id===n),runs:e.filter(e=>(e.host_id??``)===n).sort((e,t)=>i(e)-i(t))}))}var ce=e=>!!e.stop&&e.stop!==`completed`&&e.stop!==`partial`&&e.stop!==`skipped`,C=e=>e.executor===`python`;function le(e){let t=0;return e.map((n,r)=>{let i=e[r-1];return i&&(n.attempt??0)<=(i.attempt??0)&&t++,t})}var ue=e=>`${e.ts}|${e.key}`,de=(e,t)=>e.find(e=>e.run===t),fe=(e,t)=>re(t,!!e.procs?.alive)===`running`;function pe(e){return e?[...e.launches.map(e=>({cls:`llm`,id:`c:${e.key}`,kind:e.kind||`task`,unit:e.unit||``,detail:[e.unit,e.model||e.role].filter(Boolean).join(` | `),ageS:e.age_s,key:e.key})),...e.python_tasks.map(e=>({cls:`py`,id:`p:${e.key}`,kind:e.kind||`task`,unit:e.unit||``,detail:e.unit||`Python`,ageS:e.age_s,key:``}))]:[]}var me=[`tiles`,`table`,`columns`,`lines`,`heatmap`,`hbars`,`status_grid`,`note`,`blocks`];function he(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e.type;return typeof t==`string`&&me.includes(t)?e:null}var ge=e=>(e.scope??`run`)===`run`,_e={title:`contraagent`,panels:[],api_version:``},ve=(e,t)=>e instanceof i?e:new i(t,`network`),ye=class{constructor(e={}){this.snap={info:_e,runs:[],hosts:null,run:``,state:{journal:[],procs:null,plan:{nodes:[],groups:[],flow_calls:[]},outputs:{contracts:[],tally:{valid:0,invalid:0,refused:0,pending:0,failed:0,running:0}},cursor:null,panels:{},ready:!1},connected:!1,fresh:new Set,runsLoaded:!1,error:null,trends:null},this.trendsQuery=null,this.trendsAsked=0,this.trendsOver=null,this.refreshing=!1,this.trendsBusy=!1,this.infoError=null,this.runsError=null,this.hostsError=null,this.infoLoaded=!1,this.stopped=!1,this.listeners=new Set,this.rowListeners=new Set,this.closeFeed=null,this.queue=[],this.flushTimer=null,this.pollTimer=null,this.opts={runsEveryMs:5e3,batchMs:50,freshMs:4e3,...e},this.client=e.client??a(e.baseUrl===void 0?{}:{baseUrl:e.baseUrl})}get snapshot(){return this.snap}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}onNewRow(e){return this.rowListeners.add(e),()=>this.rowListeners.delete(e)}async start(){this.stopped=!1,await this.refresh(),this.schedule()}schedule(){this.stopped||this.opts.runsEveryMs<=0||this.pollTimer||(this.pollTimer=setTimeout(()=>{this.pollTimer=null,this.refresh().finally(()=>this.schedule())},this.opts.runsEveryMs))}async refresh(){if(this.refreshing)return;this.refreshing=!0;try{this.infoLoaded||await this.loadInfo(),await this.refreshRuns()}finally{this.refreshing=!1}let e=this.trendsQuery;!e||this.trendsBusy||this.stopped||this.trendsKey()===this.trendsOver||(this.trendsBusy=!0,this.fetchTrends(e).finally(()=>this.trendsBusy=!1))}trendsKey(){return`${this.snap.runs.map(e=>`${e.run}\t${e.last_ts}\t${e.attempts}`).join(`
|
|
2
|
+
`)}\n\n${this.trendPanelNames().join(`
|
|
3
|
+
`)}`}trendPanelNames(){return this.snap.info.panels.filter(e=>e.scope===`trends`).map(e=>e.name)}async loadTrends(e){let t=this.snap.trends&&JSON.stringify(this.snap.trends.query)===JSON.stringify(e);this.trendsQuery=e,this.set({trends:{query:e,data:t?this.snap.trends.data:this.snap.trends?.data??null,panels:t?this.snap.trends.panels:{},loading:!0,error:null}}),await this.fetchTrends(e)}closeTrends(){this.trendsQuery=null}async fetchTrends(e){let t=++this.trendsAsked;this.trendsOver=this.trendsKey();let n=()=>t!==this.trendsAsked||this.stopped?null:this.snap.trends,r=this.trendPanelNames(),i=this.client.trends(e).then(t=>{let r=n();r&&this.set({trends:{...r,query:e,data:t,loading:!1,error:null}})},t=>{let r=n();r&&this.set({trends:{...r,query:e,loading:!1,error:ve(t,`${this.client.baseUrl}/api/trends`)}})}),a=(e,t)=>{let r=n();r&&this.set({trends:{...r,panels:{...r.panels,[e]:t}}})},o=r.map(t=>this.client.trendsPanel(t,e).then(e=>a(t,e),e=>a(t,{error:String(e)})));await Promise.allSettled([i,...o])}async loadInfo(){try{let e=this.panelNames(),t=await this.client.info();if(this.stopped)return;this.infoLoaded=!0,this.infoError=null,this.set({info:t}),this.snap.run&&this.panelNames()!==e&&this.reopen()}catch(e){this.infoError=ve(e,`${this.client.baseUrl}/api/info`)}}async refreshRuns(){let[e,t]=await Promise.allSettled([this.client.runs(),this.snap.info.hosts?this.client.hosts():Promise.resolve(null)]);if(this.stopped)return;let n={};e.status===`fulfilled`?(n.runs=e.value,n.runsLoaded=!0,this.runsError=null):this.runsError=ve(e.reason,`${this.client.baseUrl}/api/runs`),t.status===`fulfilled`?(n.hosts=t.value,this.hostsError=null):this.hostsError=ve(t.reason,`${this.client.baseUrl}/api/hosts`);let r=this.infoError??this.runsError??this.hostsError;r?.message!==this.snap.error?.message&&(n.error=r),Object.keys(n).length&&this.set(n)}panelNames(){return this.snap.info.panels.filter(ge).map(e=>e.name).join(`
|
|
4
|
+
`)}reopen(){let e=this.snap.run;this.closeFeed?.(),this.closeFeed=null,this.selectRun(e)}selectRun(e){if(e===this.snap.run&&(this.closeFeed||!e)||(this.closeFeed?.(),this.closeFeed=null,this.queue=[],this.set({run:e,state:{journal:[],procs:null,plan:{nodes:[],groups:[],flow_calls:[]},outputs:{contracts:[],tally:{valid:0,invalid:0,refused:0,pending:0,failed:0,running:0}},cursor:null,panels:{},ready:!1},connected:!1,fresh:new Set}),!e))return;let t=this.snap.info.panels.filter(ge).map(e=>e.name),n={open:()=>{this.push({event:`connected`}),this.set({connected:!0})},error:()=>this.set({connected:!1}),message:e=>this.push(e)};this.closeFeed=this.opts.openRunFeed?this.opts.openRunFeed(e,t,n):function(e,t,n,r={}){let i=[...o,...t.map(e=>`panel:${e}`)];return s(`${l(r)}/events?run=${c(e)}`,i,n,r)}(e,t,n,{...this.opts.baseUrl===void 0?{}:{baseUrl:this.opts.baseUrl},...this.opts.feed})}stop(){this.stopped=!0,this.closeFeed?.(),this.closeFeed=null,this.pollTimer&&clearTimeout(this.pollTimer),this.pollTimer=null,this.flushTimer&&clearTimeout(this.flushTimer),this.flushTimer=null}push(e){this.queue.push(e),this.flushTimer??=setTimeout(()=>this.flush(),this.opts.batchMs)}flush(){this.flushTimer=null;let e=this.queue;this.queue=[];let t=this.snap.state.ready,n=[];for(let r of e)r.event===`connected`?t=!1:r.event===`ready`?t=!0:r.event===`journal`&&t&&n.push(r.data);let r=function(e,t){let n=e,r=null,i=()=>{if(!r)return;let e=n.journal.concat(r);n={...n,journal:e.length>4e3?e.slice(e.length-4e3):e},r=null};for(let e of t)if(e.event!==`journal`)switch(i(),e.event){case`connected`:n={...n,journal:[],ready:!1};break;case`ready`:n={...n,ready:!0};break;case`procs`:n={...n,procs:e.data};break;case`plan`:n={...n,plan:e.data};break;case`outputs`:n={...n,outputs:e.data};break;case`cursor`:n={...n,cursor:e.data};break;default:n={...n,panels:{...n.panels,[e.event.slice(6)]:e.data}}}else(r??=[]).push(e.data);return i(),n}(this.snap.state,e);if(!n.length)return void this.set({state:r});let i=new Set(this.snap.fresh);for(let e of n)i.add(ue(e));this.set({state:r,fresh:i});for(let e of n)for(let t of this.rowListeners)t(e);setTimeout(()=>{let e=new Set(this.snap.fresh);for(let t of n)e.delete(ue(t));this.set({fresh:e})},this.opts.freshMs)}set(e){this.snap={...this.snap,...e};for(let e of this.listeners)e(this.snap)}},be=encodeURIComponent;function xe(e){let t=Array.from(e,e=>/^[\p{L}\p{N}._-]$/u.test(e)?e:`_`).join(``).replace(/\.\.+/g,e=>`_`.repeat(e.length));return t.startsWith(`.`)?`_${t.slice(1)}`:t||`_`}var Se=e=>Object.keys(e).length>0;function Ce(e){return(t,n,r)=>{let i=!1;return(async()=>{try{let[a,o,s,c,l]=await Promise.all([e.journal(t),e.file(`runs/${be(t)}/plan.json`),e.file(`runs/${be(t)}/outputs.json`),e.file(`runs/${be(t)}/cursor.json`),Promise.all(n.map(n=>e.panel(t,n).catch(e=>({error:String(e)}))))]);if(i)return;r.open?.();let u=e=>!i&&r.message(e);for(let e of a.entries)u({event:`journal`,data:e});u({event:`plan`,data:o}),u({event:`outputs`,data:s}),u({event:`cursor`,data:Se(c)?c:null}),n.forEach((e,t)=>u({event:`panel:${e}`,data:l[t]??{}})),u({event:`ready`,data:{journal:a.total}})}catch{i||r.error?.()}})(),()=>{i=!0}}}var we=()=>({input:0,output:0,cache_read:0,cache_creation:0,calls:0,cost:null,reported:0}),Te=e=>e.input+e.output+e.cache_read+e.cache_creation;function Ee(e,t){let n=t.usage;return n||t.cost_usd!==null&&t.cost_usd!==void 0?(n&&(e.input+=n.input??0,e.output+=n.output??0,e.cache_read+=n.cache_read??0,e.cache_creation+=n.cache_creation??0,e.calls+=n.calls??0),t.cost_usd!==null&&t.cost_usd!==void 0&&(e.cost=(e.cost??0)+t.cost_usd),e.reported++,e):e}function De(e){let t={input:0,output:0,cache_read:0,cache_creation:0,calls:0,cost:null,reported:0};for(let n of e)Ee(t,n);return t.reported?t:null}function Oe(e,t){let n=new Map,r={input:0,output:0,cache_read:0,cache_creation:0,calls:0,cost:null,reported:0};for(let i of e){Ee(r,i);let e=t(i),a=n.get(e);a||n.set(e,a={id:e,kind:i.kind,unit:i.unit??``,spend:we(),share:null}),Ee(a.spend,i)}let i=[...n.values()].filter(e=>e.spend.reported);for(let e of i)e.share=r.cost?(e.spend.cost??0)/r.cost:null;return i.sort((e,t)=>(t.spend.cost??0)-(e.spend.cost??0)||Te(t.spend)-Te(e.spend))}var ke=e=>Oe(e,e=>e.kind).map(e=>({...e,unit:``})),Ae=e=>(e.input??0)+(e.output??0)+(e.cache_read??0)+(e.cache_creation??0);function je(e,t){switch(t){case`cost`:return e.cost_usd??null;case`tokens`:return Ae(e);case`time`:return e.wall_s??0;case`sessions`:return e.sessions}}var Me=e=>[`cost`,`tokens`,`time`,`sessions`].filter(t=>e.some(e=>(je(e,t)??0)>0)),Ne=e=>Date.parse(e.observed_at??``),Pe=e=>!Number.isNaN(Ne(e))&&(e.five_hour_pct!=null||e.seven_day_pct!=null);function Fe(e){let t=[];for(let n of e)for(let e of n.quota??[])Pe(e)&&t.push({reading:e,key:n.key,attempt:n.attempt??0});return t.sort((e,t)=>Ne(e.reading)-Ne(t.reading))}var Ie=e=>`${e.credential??``}\0${e.account??``}`;function Le(e){let t=new Map;for(let{reading:n}of Fe(e)){let e=Ie(n),r=t.get(e);r||t.set(e,r=[]),r.push(n)}let n=[];for(let e of t.values()){let t=e[0],r=e[e.length-1];t&&r&&n.push({credential:r.credential??``,account:r.account??``,first:t,last:r})}return n.sort((e,t)=>(t.last.seven_day_pct??0)-(e.last.seven_day_pct??0))}function Re(e,t){let n=(e.quota??[]).filter(Pe).sort((e,t)=>Ne(e)-Ne(t)),r=Date.parse(e.ts),i=n[0]??null,a=i===null?``:Ie(i);return{start:i,next:(i===null||Number.isNaN(r)?void 0:t.find(e=>Ne(e.reading)>r&&Ie(e.reading)===a))?.reading??null}}function ze(e){let t=/^invalid input:\s*(.*)$/s.exec(e||``);if(!t)return[];let n=[];for(let e of(t[1]??``).split(`; `)){let t=/^input from (\S+) is missing: (\S+)/.exec(e);t?n.push({path:t[2]??``,producer:t[1]??``,problem:`missing`}):(t=/^input from (\S+) ended \S+: (\S+)/.exec(e),t?n.push({path:t[2]??``,producer:t[1]??``,problem:`failed`}):(t=/^(\S+?): required input is missing/.exec(e),t?n.push({path:t[1]??``,producer:``,problem:`missing`}):(t=/^(\S+?): /.exec(e),t&&!n.some(e=>e.path===t?.[1])&&n.push({path:t[1]??``,producer:``,problem:`checks`}))))}return n}function w(e,t){if(!e||!t)return e??``;let n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return e.replace(RegExp(`(?:/[^\\s:'"]*)?/${n}/`,`g`),``)}var Be=`lit-localize-status`,T=(e,...t)=>({strTag:!0,strings:e,values:t}),Ve=(e,t,n)=>{let r=e[0];for(let i=1;i<e.length;i++)r+=t[n?n[i-1]:i-1],r+=e[i];return r},He=e=>{return typeof(t=e)!=`string`&&`strTag`in t?Ve(e.strings,e.values):e;var t},E=He,Ue=!1,We=class{constructor(e){this.__litLocalizeEventHandler=e=>{e.detail.status===`ready`&&this.host.requestUpdate()},this.host=e}hostConnected(){window.addEventListener(Be,this.__litLocalizeEventHandler)}hostDisconnected(){window.removeEventListener(Be,this.__litLocalizeEventHandler)}},Ge=e=>e.addController(new We(e)),D=()=>(e,t)=>(e.addInitializer(Ge),e),Ke=class{constructor(){this.settled=!1,this.promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}resolve(e){this.settled=!0,this._resolve(e)}reject(e){this.settled=!0,this._reject(e)}},qe=[];for(let e=0;e<256;e++)qe[e]=(e>>4&15).toString(16)+(15&e).toString(16);var Je=new WeakMap,Ye=new Map;function Xe(e){window.dispatchEvent(new CustomEvent(Be,{detail:e}))}var Ze,Qe,$e,et,tt,nt=``,rt=new Ke;rt.resolve();var it=0,at=e=>(function(){if(Ue)throw Error(`lit-localize can only be configured once`);E=(e,t)=>function(e,t,n){if(e){let r=e[n?.id??function(e){let t=typeof e==`string`?e:e.strings,n=Ye.get(t);return n===void 0&&(n=function(e,t){return(t?`h`:`s`)+function(e){let t=0,n=8997,r=0,i=33826,a=0,o=40164,s=0,c=52210;for(let l=0;l<e.length;l++)n^=e.charCodeAt(l),t=435*n,r=435*i,a=435*o,s=435*c,a+=n<<8,s+=i<<8,r+=t>>>16,n=65535&t,a+=r>>>16,i=65535&r,c=s+(a>>>16)&65535,o=65535&a;return qe[c>>8]+qe[255&c]+qe[o>>8]+qe[255&o]+qe[i>>8]+qe[255&i]+qe[n>>8]+qe[255&n]}(typeof e==`string`?e:e.join(``))}(t,typeof e!=`string`&&!(`strTag`in e)),Ye.set(t,n)),n}(t)];if(r){if(typeof r==`string`)return r;if(`strTag`in r)return Ve(r.strings,t.values,r.values);{let e=Je.get(r);return e===void 0&&(e=r.values,Je.set(r,e)),{...r,values:e.map(e=>t.values[e])}}}}return He(t)}(tt,e,t),Ue=!0}(),nt=Qe=e.sourceLocale,($e=new Set(e.targetLocales)).add(e.sourceLocale),et=e.loadLocale,{getLocale:ot,setLocale:st}),ot=()=>nt,st=e=>{if(e===(Ze??nt))return rt.promise;if(!$e||!et)throw Error(`Internal error`);if(!$e.has(e))throw Error(`Invalid locale code`);let t=++it;return Ze=e,rt.settled&&(rt=new Ke),Xe({status:`loading`,loadingLocale:e}),(e===Qe?Promise.resolve({templates:void 0}):et(e)).then(n=>{it===t&&(nt=e,Ze=void 0,tt=n.templates,Xe({status:`ready`,readyLocale:e}),rt.resolve())},n=>{it===t&&(Xe({status:`error`,errorLocale:e,errorMessage:n.toString()}),rt.reject(n))}),rt.promise},ct=globalThis,lt=ct.ShadowRoot&&(ct.ShadyCSS===void 0||ct.ShadyCSS.nativeShadow)&&`adoptedStyleSheets`in Document.prototype&&`replace`in CSSStyleSheet.prototype,ut=Symbol(),dt=new WeakMap,ft=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==ut)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(lt&&e===void 0){let n=t!==void 0&&t.length===1;n&&(e=dt.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),n&&dt.set(t,e))}return e}toString(){return this.cssText}},pt=e=>new ft(typeof e==`string`?e:e+``,void 0,ut),O=(e,...t)=>new ft(e.length===1?e[0]:t.reduce((t,n,r)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if(typeof e==`number`)return e;throw Error(`Value passed to 'css' function must be a 'css' function result: `+e+`. Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.`)})(n)+e[r+1],e[0]),e,ut),mt=(e,t)=>{if(lt)e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let n of t){let t=document.createElement(`style`),r=ct.litNonce;r!==void 0&&t.setAttribute(`nonce`,r),t.textContent=n.cssText,e.appendChild(t)}},ht=lt?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t=``;for(let n of e.cssRules)t+=n.cssText;return pt(t)})(e):e,{is:gt,defineProperty:_t,getOwnPropertyDescriptor:vt,getOwnPropertyNames:yt,getOwnPropertySymbols:bt,getPrototypeOf:xt}=Object,St=globalThis,Ct=St.trustedTypes,wt=Ct?Ct.emptyScript:``,Tt=St.reactiveElementPolyfillSupport,Et=(e,t)=>e,Dt={toAttribute(e,t){switch(t){case Boolean:e=e?wt:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=e!==null;break;case Number:n=e===null?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch{n=null}}return n}},Ot=(e,t)=>!gt(e,t),kt={attribute:!0,type:String,converter:Dt,reflect:!1,useDefault:!1,hasChanged:Ot};Symbol.metadata??=Symbol(`metadata`),St.litPropertyMetadata??=new WeakMap;var At=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=kt){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){let n=Symbol(),r=this.getPropertyDescriptor(e,n,t);r!==void 0&&_t(this.prototype,e,r)}}static getPropertyDescriptor(e,t,n){let{get:r,set:i}=vt(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:r,set(t){let a=r?.call(this);i?.call(this,t),this.requestUpdate(e,a,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??kt}static _$Ei(){if(this.hasOwnProperty(Et(`elementProperties`)))return;let e=xt(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(Et(`finalized`)))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Et(`properties`))){let e=this.properties,t=[...yt(e),...bt(e)];for(let n of t)this.createProperty(n,e[n])}let e=this[Symbol.metadata];if(e!==null){let t=litPropertyMetadata.get(e);if(t!==void 0)for(let[e,n]of t)this.elementProperties.set(e,n)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let n=this._$Eu(e,t);n!==void 0&&this._$Eh.set(n,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let n=new Set(e.flat(1/0).reverse());for(let e of n)t.unshift(ht(e))}else e!==void 0&&t.push(ht(e));return t}static _$Eu(e,t){let n=t.attribute;return!1===n?void 0:typeof n==`string`?n:typeof e==`string`?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){let e=new Map,t=this.constructor.elementProperties;for(let n of t.keys())this.hasOwnProperty(n)&&(e.set(n,this[n]),delete this[n]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return mt(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$ET(e,t){let n=this.constructor.elementProperties.get(e),r=this.constructor._$Eu(e,n);if(r!==void 0&&!0===n.reflect){let i=(n.converter?.toAttribute===void 0?Dt:n.converter).toAttribute(t,n.type);this._$Em=e,i==null?this.removeAttribute(r):this.setAttribute(r,i),this._$Em=null}}_$AK(e,t){let n=this.constructor,r=n._$Eh.get(e);if(r!==void 0&&this._$Em!==r){let e=n.getPropertyOptions(r),i=typeof e.converter==`function`?{fromAttribute:e.converter}:e.converter?.fromAttribute===void 0?Dt:e.converter;this._$Em=r;let a=i.fromAttribute(t,e.type);this[r]=a??this._$Ej?.get(r)??a,this._$Em=null}}requestUpdate(e,t,n,r=!1,i){if(e!==void 0){let a=this.constructor;if(!1===r&&(i=this[e]),n??=a.getPropertyOptions(e),!((n.hasChanged??Ot)(i,t)||n.useDefault&&n.reflect&&i===this._$Ej?.get(e)&&!this.hasAttribute(a._$Eu(e,n))))return;this.C(e,t,n)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:n,reflect:r,wrapped:i},a){n&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,a??t??this[e]),!0!==i||a!==void 0)||(this._$AL.has(e)||(this.hasUpdated||n||(t=void 0),this._$AL.set(e,t)),!0===r&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}let e=this.constructor.elementProperties;if(e.size>0)for(let[t,n]of e){let{wrapped:e}=n,r=this[t];!0!==e||this._$AL.has(t)||r===void 0||this.C(t,void 0,n,r)}}let e=!1,t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};At.elementStyles=[],At.shadowRootOptions={mode:`open`},At[Et(`elementProperties`)]=new Map,At[Et(`finalized`)]=new Map,Tt?.({ReactiveElement:At}),(St.reactiveElementVersions??=[]).push(`2.1.2`);var jt=globalThis,Mt=e=>e,Nt=jt.trustedTypes,Pt=Nt?Nt.createPolicy(`lit-html`,{createHTML:e=>e}):void 0,Ft=`$lit$`,It=`lit$${Math.random().toFixed(9).slice(2)}$`,Lt=`?`+It,Rt=`<${Lt}>`,zt=document,Bt=()=>zt.createComment(``),Vt=e=>e===null||typeof e!=`object`&&typeof e!=`function`,Ht=Array.isArray,Ut=e=>Ht(e)||typeof e?.[Symbol.iterator]==`function`,Wt=`[
|
|
5
|
+
\f\r]`,Gt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Kt=/-->/g,qt=/>/g,Jt=RegExp(`>|${Wt}(?:([^\\s"'>=/]+)(${Wt}*=${Wt}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,`g`),Yt=/'/g,Xt=/"/g,Zt=/^(?:script|style|textarea|title)$/i,Qt=e=>(t,...n)=>({_$litType$:e,strings:t,values:n}),k=Qt(1),A=Qt(2),$t=Symbol.for(`lit-noChange`),j=Symbol.for(`lit-nothing`),en=new WeakMap,tn=zt.createTreeWalker(zt,129);function nn(e,t){if(!Ht(e)||!e.hasOwnProperty(`raw`))throw Error(`invalid template strings array`);return Pt===void 0?t:Pt.createHTML(t)}var rn=(e,t)=>{let n=e.length-1,r=[],i,a=t===2?`<svg>`:t===3?`<math>`:``,o=Gt;for(let t=0;t<n;t++){let n=e[t],s,c,l=-1,u=0;for(;u<n.length&&(o.lastIndex=u,c=o.exec(n),c!==null);)u=o.lastIndex,o===Gt?c[1]===`!--`?o=Kt:c[1]===void 0?c[2]===void 0?c[3]!==void 0&&(o=Jt):(Zt.test(c[2])&&(i=RegExp(`</`+c[2],`g`)),o=Jt):o=qt:o===Jt?c[0]===`>`?(o=i??Gt,l=-1):c[1]===void 0?l=-2:(l=o.lastIndex-c[2].length,s=c[1],o=c[3]===void 0?Jt:c[3]===`"`?Xt:Yt):o===Xt||o===Yt?o=Jt:o===Kt||o===qt?o=Gt:(o=Jt,i=void 0);let d=o===Jt&&e[t+1].startsWith(`/>`)?` `:``;a+=o===Gt?n+Rt:l>=0?(r.push(s),n.slice(0,l)+Ft+n.slice(l)+It+d):n+It+(l===-2?t:d)}return[nn(e,a+(e[n]||`<?>`)+(t===2?`</svg>`:t===3?`</math>`:``)),r]},an=class e{constructor({strings:t,_$litType$:n},r){let i;this.parts=[];let a=0,o=0,s=t.length-1,c=this.parts,[l,u]=rn(t,n);if(this.el=e.createElement(l,r),tn.currentNode=this.el.content,n===2||n===3){let e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;(i=tn.nextNode())!==null&&c.length<s;){if(i.nodeType===1){if(i.hasAttributes())for(let e of i.getAttributeNames())if(e.endsWith(Ft)){let t=u[o++],n=i.getAttribute(e).split(It),r=/([.?@])?(.*)/.exec(t);c.push({type:1,index:a,name:r[2],strings:n,ctor:r[1]===`.`?un:r[1]===`?`?dn:r[1]===`@`?fn:ln}),i.removeAttribute(e)}else e.startsWith(It)&&(c.push({type:6,index:a}),i.removeAttribute(e));if(Zt.test(i.tagName)){let e=i.textContent.split(It),t=e.length-1;if(t>0){i.textContent=Nt?Nt.emptyScript:``;for(let n=0;n<t;n++)i.append(e[n],Bt()),tn.nextNode(),c.push({type:2,index:++a});i.append(e[t],Bt())}}}else if(i.nodeType===8){if(i.data===Lt)c.push({type:2,index:a});else{let e=-1;for(;(e=i.data.indexOf(It,e+1))!==-1;)c.push({type:7,index:a}),e+=It.length-1}}a++}}static createElement(e,t){let n=zt.createElement(`template`);return n.innerHTML=e,n}};function on(e,t,n=e,r){if(t===$t)return t;let i=r===void 0?n._$Cl:n._$Co?.[r],a=Vt(t)?void 0:t._$litDirective$;return i?.constructor!==a&&(i?._$AO?.(!1),a===void 0?i=void 0:(i=new a(e),i._$AT(e,n,r)),r===void 0?n._$Cl=i:(n._$Co??=[])[r]=i),i!==void 0&&(t=on(e,i._$AS(e,t.values),i,r)),t}var sn=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:t},parts:n}=this._$AD,r=(e?.creationScope??zt).importNode(t,!0);tn.currentNode=r;let i=tn.nextNode(),a=0,o=0,s=n[0];for(;s!==void 0;){if(a===s.index){let t;s.type===2?t=new cn(i,i.nextSibling,this,e):s.type===1?t=new s.ctor(i,s.name,s.strings,this,e):s.type===6&&(t=new pn(i,this,e)),this._$AV.push(t),s=n[++o]}a!==s?.index&&(i=tn.nextNode(),a++)}return tn.currentNode=zt,r}p(e){let t=0;for(let n of this._$AV)n!==void 0&&(n.strings===void 0?n._$AI(e[t]):(n._$AI(e,n,t),t+=n.strings.length-2)),t++}},cn=class e{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,n,r){this.type=2,this._$AH=j,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=n,this.options=r,this._$Cv=r?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,t=this._$AM;return t!==void 0&&e?.nodeType===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=on(this,e,t),Vt(e)?e===j||e==null||e===``?(this._$AH!==j&&this._$AR(),this._$AH=j):e!==this._$AH&&e!==$t&&this._(e):e._$litType$===void 0?e.nodeType===void 0?Ut(e)?this.k(e):this._(e):this.T(e):this.$(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==j&&Vt(this._$AH)?this._$AA.nextSibling.data=e:this.T(zt.createTextNode(e)),this._$AH=e}$(e){let{values:t,_$litType$:n}=e,r=typeof n==`number`?this._$AC(e):(n.el===void 0&&(n.el=an.createElement(nn(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===r)this._$AH.p(t);else{let e=new sn(r,this),n=e.u(this.options);e.p(t),this.T(n),this._$AH=e}}_$AC(e){let t=en.get(e.strings);return t===void 0&&en.set(e.strings,t=new an(e)),t}k(t){Ht(this._$AH)||(this._$AH=[],this._$AR());let n=this._$AH,r,i=0;for(let a of t)i===n.length?n.push(r=new e(this.O(Bt()),this.O(Bt()),this,this.options)):r=n[i],r._$AI(a),i++;i<n.length&&(this._$AR(r&&r._$AB.nextSibling,i),n.length=i)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){let t=Mt(e).nextSibling;Mt(e).remove(),e=t}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}},ln=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,n,r,i){this.type=1,this._$AH=j,this._$AN=void 0,this.element=e,this.name=t,this._$AM=r,this.options=i,n.length>2||n[0]!==``||n[1]!==``?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=j}_$AI(e,t=this,n,r){let i=this.strings,a=!1;if(i===void 0)e=on(this,e,t,0),a=!Vt(e)||e!==this._$AH&&e!==$t,a&&(this._$AH=e);else{let r=e,o,s;for(e=i[0],o=0;o<i.length-1;o++)s=on(this,r[n+o],t,o),s===$t&&(s=this._$AH[o]),a||=!Vt(s)||s!==this._$AH[o],s===j?e=j:e!==j&&(e+=(s??``)+i[o+1]),this._$AH[o]=s}a&&!r&&this.j(e)}j(e){e===j?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??``)}},un=class extends ln{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===j?void 0:e}},dn=class extends ln{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==j)}},fn=class extends ln{constructor(e,t,n,r,i){super(e,t,n,r,i),this.type=5}_$AI(e,t=this){if((e=on(this,e,t,0)??j)===$t)return;let n=this._$AH,r=e===j&&n!==j||e.capture!==n.capture||e.once!==n.once||e.passive!==n.passive,i=e!==j&&(n===j||r);r&&this.element.removeEventListener(this.name,this,n),i&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){typeof this._$AH==`function`?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}},pn=class{constructor(e,t,n){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(e){on(this,e)}},mn={M:Ft,P:It,A:Lt,C:1,L:rn,R:sn,D:Ut,V:on,I:cn,H:ln,N:dn,U:fn,B:un,F:pn},hn=jt.litHtmlPolyfillSupport;hn?.(an,cn),(jt.litHtmlVersions??=[]).push(`3.3.3`);var gn=globalThis,M=class extends At{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=((e,t,n)=>{let r=n?.renderBefore??t,i=r._$litPart$;if(i===void 0){let e=n?.renderBefore??null;r._$litPart$=i=new cn(t.insertBefore(Bt(),e),e,void 0,n??{})}return i._$AI(e),i})(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return $t}};M._$litElement$=!0,M.finalized=!0,gn.litElementHydrateSupport?.({LitElement:M});var _n=gn.litElementPolyfillSupport;_n?.({LitElement:M}),(gn.litElementVersions??=[]).push(`4.2.2`);var N=e=>(t,n)=>{n===void 0?customElements.define(e,t):n.addInitializer(()=>{customElements.define(e,t)})},vn={attribute:!0,type:String,converter:Dt,reflect:!1,hasChanged:Ot},yn=(e=vn,t,n)=>{let{kind:r,metadata:i}=n,a=globalThis.litPropertyMetadata.get(i);if(a===void 0&&globalThis.litPropertyMetadata.set(i,a=new Map),r===`setter`&&((e=Object.create(e)).wrapped=!0),a.set(n.name,e),r===`accessor`){let{name:r}=n;return{set(n){let i=t.get.call(this);t.set.call(this,n),this.requestUpdate(r,i,e,!0,n)},init(t){return t!==void 0&&this.C(r,void 0,e,t),t}}}if(r===`setter`){let{name:r}=n;return function(n){let i=this[r];t.call(this,n),this.requestUpdate(r,i,e,!0,n)}}throw Error(`Unsupported decorator location: `+r)};function P(e){return(t,n)=>typeof n==`object`?yn(e,t,n):((e,t,n)=>{let r=t.hasOwnProperty(n);return t.constructor.createProperty(n,e),r?Object.getOwnPropertyDescriptor(t,n):void 0})(e,t,n)}function F(e){return P({...e,state:!0,attribute:!1})}var bn=(e,t,n)=>(n.configurable=!0,n.enumerable=!0,Reflect.decorate&&typeof t!=`object`&&Object.defineProperty(e,t,n),n);function xn(e,t){return(n,r,i)=>{let a=t=>t.renderRoot?.querySelector(e)??null;if(t){let{get:e,set:t}=typeof r==`object`?n:i??(()=>{let e=Symbol();return{get(){return this[e]},set(t){this[e]=t}}})();return bn(n,r,{get(){let n=e.call(this);return n===void 0&&(n=a(this),(n!==null||this.hasUpdated)&&t.call(this,n)),n}})}return bn(n,r,{get(){return a(this)}})}}var Sn,Cn=t({templates:()=>wn}),wn=function(e){let t=new Map;return new Proxy(e,{get(e,n){if(typeof n==`string`){if(!t.has(n)){let r;for(let t=1;t<=n.length&&r===void 0;t++){let i=n.slice(0,t);Object.hasOwn(e,i)&&(r=e[i])}t.set(n,r)}return t.get(n)}}})}({c:`実行`,d:`出力`,h5:k`${0} の出力`,h6:k`JSON オブジェクト(スキーマ ${0})`,h87:k`依存先タスク ${0}`,h8e:k`この実行には階層 <code>${0}</code> がありません`,ha:k`ファイルなし | Python コードで定義(<code>TaskAdapter</code>)`,hc:k`実行中 ${0}${1}`,hf:k`${0} の出力から`,"no-":`実行はまだありません`,non:`なし`,"outcome-d":`完了`,"outcome-p":`一部のみ完了`,s000:`実行履歴の未実行のタスク`,s00c:T`HTTP ステータス ${0}`,s02f7:`実行されず`,s02f9:T`アカウント: ${0}`,s030:T`カスタムビュー ${0} はありません`,s037:`完了`,s0382:T`${0}: ${1}`,s038b:`ページ`,s03b:`タブ`,s03e:`タスク`,s03f:T`古い試行 ${0} 件は非表示`,s042:`タスクが宣言したパターンの下で、試行が作成・変更・削除したファイル(changes)`,s044:T`一部のみ完了 ${0} 件`,s051:`実行中のエージェントのセッション`,s055:`選択中の項目`,s061:`OutputContract`,s062:`トランスクリプト`,s0668:`ユニットごとのステージとステップ(CursorStore)`,s066d:`出力`,s06a5:`Esc: 1 つ上の階層`,s06ac:`依存先`,s06b0:`実行中ではありません`,s06bf:`中を表示`,s077:`テキストフィルター(/)`,s079:T`キャッシュ ${0}`,s07d:`関数`,s07e:T`+${0}`,s087:T`${0}%`,s08b1:T`${0}(認証情報が休止中)`,s08b3:`いいえ`,s08c:`稼働中`,s08f:T`依存先: ${0}`,s0932:`出力の検証: OK`,s0935:`終了日`,s094:`最初のエージェントのセッションの前に終了`,s09b:`プロンプトなし`,s0b0:T`作成元: ${0}`,s0b2:`エージェントのセッション開始時のサブスクリプション利用率(アカウント全体)`,s0b3:`OK`,s0b7:`実行前からあるファイル`,s0bf:T`${0} 周目`,s0c:T`モデル切り替えのあったタスク ${0} 件`,s0d7:T`キャッシュ書き込み ${0}`,s0df:`依存先タスクが登録されなかった`,s0e6:`問題`,s0ea:`プラグインディレクトリ`,s0ef:`すべてのホスト`,s0f0:`一部省略`,s0f1:`リセット済み`,s0f2:T`最初の API 呼び出しの入力: ${0}`,s0f8:T`出力ファイル ${0} 件`,s103:`再開カーソル`,s104:`昇順に並べ替え`,s107:`種別の最初のタスクの開始時に記録(definitions/<kind>.json)`,s108:T`${0} の実装`,s114:T`${0} 型の JSON 値`,s115:`過去 24 時間`,s123:`待機中`,s125:T`要素 ${0} 個`,s12c:`型の不一致`,s13:T`最終報告 ${0}`,s14:`コーディングエージェントが報告した値`,s150:`出力`,s156:`なし(任意)`,s158:T`週の利用率 ${0}`,s159:`このタスクが代わりに出力ファイルを書く種別(output_of)`,s163:`検証対象のファイルなし`,s165:T`${0} 回目で完了 | 失敗 1 回`,s168:`検証のタイミング`,s170:T`実行されず ${0} 件`,s179:`アカウントごと、最初の値 → 最後の値`,s17d:`利用率のルール`,s17e:`書き込み待ち(タスクが待機中)`,s18:T`ループ内の ${0}`,s197:`利用できるモデルなし`,s19e:`上限: max_concurrent`,s1a2:T`スキップ ${0} 件`,s1a3:`種別 · ユニット`,s1a4:`モデルごとの、エージェントのセッションの使用量。モデル切り替えの前後は別々に集計(Plan.models)`,s1ac8:`エディタのテーマ`,s1acc:`書き込まれていない出力 1 件(タスクが未実行)`,s1b2:T`種別 ${0}`,s1bb:`すべてのタスクが開始済み`,s1bf:`実行中のプロセスなし`,s1c0:`パラメータ`,s1c2:`タスクが選択されていません`,s1c4:T`セッション開始時の利用率(アカウント全体): ${0}`,s1c7:`実行に登録されたすべてのタスク(種別ごと、plan.jsonl)`,s1cc:`実行中の Python タスク`,s1db:`API エラー`,s1dc:T`試行 ${0} 回`,s1dd:`実行中のタスクなし`,s1e9:T`プロンプト(${0} 文字、ほか ${1} 文字は未保存)`,s1eb:`入力`,s1f2:`削除`,s1f5:T`所要時間 ${0}`,s20e:T`リセットまで ${0}`,s20f9:`依存先タスクが実行されなかった`,s20fd:`ホストなし`,s217:`あり`,s21a:`発生したらリトライする例外(retry_on)`,s221:`JSON ではありません`,s224:`ツール実行中に中止`,s230:`スキーマにないフィールド`,s234:`終了した試行はまだありません`,s236:`拡大`,s23b:T`${0} 回の試行がすべて失敗: ${1}`,s23f:`定義はまだありません`,s24:T`完了 ${0}`,s25:`OutputContract・InputContract を宣言したタスクはありません`,s260:`API 呼び出し 1 回`,s26ba:`ユニットなし`,s26bb:`実行した試行の回数(リトライを含む、journal.jsonl)`,s26e:T`API 呼び出し ${0} 回`,s27a:`最後のメッセージから`,s27b:T`ユニット: ${0}`,s27d:`フローの構成`,s28a2:`リプレイ`,s28ad:`曜日と時刻ごと(期間のタイムゾーン)`,s28f:`InputContract`,s29:T`最大コンテキスト: ${0}`,s2a:`現在`,s2c8:`リトライ`,s2cd:`モデルの利用可否`,s2dd:`試行の結果(stop)`,s2df:`割合`,s2e3:T`ほかの出力 ${0} 件`,s2e4:`周`,s2f34:T`${0} 周`,s2f3c:`問題なし`,s2f4:`すべての出力`,s2f5:`定義なし`,s2fa:T`5 時間枠の利用率 ${0}(リセット ${1})`,s2fe3:`ツール`,s2fea:T`修正依頼 ${0}`,s31:`終了(未実行のタスク 1 件)`,s321:`余分なフィールド`,s326:T`キャッシュ読み込み ${0}`,s32d:`最大コンテキスト`,s33:`パイプラインの階層`,s343:`新しいイベント 1 件を表示`,s34b:`終了`,s34e:`降順に並べ替え`,s351:`終了した試行なし`,s352:`ファイル全体`,s355:`入力ファイルに検証エラー`,s366:`週`,s367:`料金`,s36d:T`この書き出しに含まれないもの: ${0}`,s36e:T`所要時間 ${0}`,s3700:`Web 検索 1 回`,s370b:T`報告時刻 ${0}`,s378:`検証エラーの後に、同じエージェントのセッションで続けるラウンド(rounds)`,s37d:`スキーマ以外の検証(validators)`,s384:T`${0} を展開`,s387:T`検索結果 ${0} 件`,s38e65:`修正依頼のプロンプトに含めて送信`,s38e6a:`日ごとの料金`,s390:`JSON オブジェクトではありません`,s39e:`パイプライン`,s3a7:T`上限: ${0}`,s3aa:`出力ファイルなし`,s3b3:`プロセスツリー`,s3b9:T`${0} にモニター API がありません: ${1}`,s3bd:T`task_detail コールバックが失敗: ${0}`,s3c6:`実行した試行の回数`,s3cd:`実行中のエージェントのセッション 1 件`,s3d0:`エージェントのセッション`,s3d1:`概要`,s3d31:`利用できるモデルがなく、設定どおりのモデルで実行する種別(kept)`,s3d38:T`認証情報 ${0}`,s3d99:`検証エラー後の、同じエージェントのセッション`,s3d9b:`テキストファイル`,s3dd:`ネットワークエラーで応答なし`,s3f1:`各タスクが書き込むファイル`,s3f7:`修正依頼`,s3fd:`開始`,s407:T`${0}: 入力`,s408:`週の利用率`,s41:`Tab: 次のノード`,s42a:`フィールド`,s42c:`検証`,s438:`ハイライトを解除`,s43a:`入力ファイル`,s43e:`利用不可`,s451:`料金の高いタスク`,s454:T`${0} のループの各周`,s45d:T`${0}(カスタムビュー)`,s466:`モデル切り替えのあったタスク 1 件`,s467:T`1 周: ${0}`,s473:`キャッシュ読み込み`,s478:`検証対象のファイル(OutputContract、InputContract)`,s479:`締め切り`,s47a:T`このタスクの入力 ${0} 件`,s47b:`Python タスク`,s47c:`未対応のイベント`,s482:T`終了 ${0}`,s48e:`所要時間`,s490:`モニターのサーバーに接続済み`,s491:T`${0} のループ`,s4a:T`${0} 日前`,s4d6:`検索結果 1 件`,s4d8:`モデル切り替え`,s4e7:T`修正依頼 ${0} 回で完了 | 最初の検証エラー: ${1}`,s4ef:`ループ`,s4f0:`スキーマにない`,s4f9:T`ホスト ${0}`,s4fe:`エージェントタスク`,s501:T`${0}: ${1} → ${2}`,s504:`日付指定`,s5131:`そのモデルで始めたエージェントのセッションの数`,s5138:`入力・出力・キャッシュ読み込み・キャッシュ書き込みの合計`,s521:`1 ユニット`,s525b:`失敗の後の、次のモデルでの新しいエージェントのセッション(Router のホップ)`,s525c:`記録から再生した試行(replayed)`,s529:T`上限 ${0}`,s52b:`このバージョンの contraagent が対応していないイベント種別(unread_events)`,s52c7:`次の周`,s52cc:T`${0} の締め切りと仕上げの猶予を過ぎた`,s52cf:`カスタムビュー`,s535:`種別`,s53c5:T`${0}: 未実行`,s53c8:`不可`,s54:`プロンプト`,s552:T`フロー呼び出し ${0}`,s555:`プラグインディレクトリ`,s558:`認証情報の不一致`,s5590:`項目`,s559f:`その他のモデル`,s55f:T`${0}(${1})`,s566:T`(ほか ${0} 文字は未保存)`,s567:`未実行(依存先タスクが失敗)`,s568:T`後続タスク: ${0}`,s571:T`入力 ${0} がありません(${1} が未実行)`,s574:T`キャッシュ書き込み ${0}`,s585:T`入力 ${0} がありません(${1} が失敗)`,s587:T`${0} 以降報告なし`,s58b:`モデルの置き換え`,s58c:`実行履歴`,s591:`5 時間枠`,s594:T`修正依頼 ${0} 回`,s59e:`上限に接近`,s5a3:`休止中`,s5a7:`ツール`,s5ab:`並び順`,s5b9:`種別ごとのトークンと料金`,s5bd:`フロー呼び出しごとの締め切り(time_box)`,s5cd:T`エージェントのセッション ${0} 回`,s5cf:`値なし`,s5d0:`実行中にこのタスクが占有する名前(claims)`,s5d4:T`${0} 回目で完了 | 失敗 ${1} 回`,s5da:`モデル`,s5de:`依存先タスク`,s5e3:`書き込みなし(タスクが未実行)`,s5e6:`テキスト(JSON 文字列)`,s5f2:`ロールなし`,s5f31:`エージェント・モデル・認証情報`,s5f34:`エラー`,s5f40:`行なし`,s5f43:`ソース`,s5f7:`なし(必須)`,s5f8:T`認証情報 ${0} は休止中`,s5ff:`エージェントタスク`,s601:`実行中`,s605:T`未実行の後続タスク ${0} 件`,s620:`キャッシュ書き込み`,s629:`任意`,s647:`応答が JSON ではなく HTML`,s649:`後続タスク`,s64f:`変更禁止の箇所`,s652:T`ロック ${0} 件`,s653:`締め切りを過ぎた`,s65c:`中断`,s6645:`拡大(Ctrl + スクロール)`,s6647:`ファイルなし`,s664b:`ツール呼び出しが戻る前に実行が終了`,s67:T`${0} ユニット`,s680:`タイムライン`,s685:`修正依頼`,s688:`その他の検証`,s68d:T`仕上げの猶予 ${0}`,s695:`修正依頼 1 回`,s699:T`スキーマ ${0}`,s6a0:`1 ステップ完了`,s6a8:T`入力 ${0} がありません(${1} が未完了)`,s6aa:`未実行(入力ファイルなし)`,s6b0:`ホスト`,s6b8:T`同時実行 ${0}/${1}`,s6b9:`タスクなし`,s6c3:`依存先タスクなし`,s6c7:`実行の開始時刻`,s6c8:T`依存先タスク ${0} が失敗`,s6d7:T`${1} タスク中 ${0} 件完了`,s6db:T`${0} 文字`,s6e:`読み込み中…`,s6f1:`API 呼び出し`,s6f2:`出力ファイル 1 件`,s6fa:`フロー呼び出しがエラーで終了`,s700:`書き出しに含まれない`,s703:T`${0} まで休止`,s706:`実行グループ`,s70a7:T`タスク終了後の利用率: ${0}`,s70af:`種別`,s71:T`モデル切り替え: ${0}`,s721:`ホストからの報告なし`,s7233:`古い試行 1 件は非表示`,s7239:T`修正依頼のあったタスク ${0} 件`,s72dc:`ユニットごとの周回数`,s72dd:`キャッシュ読み込み`,s734:`スタブエージェント`,s737:`ループの周回数`,s73d:`未実行の後続タスク 1 件`,s755:T`プラグイン ${0}`,s758:`エージェントのセッションなし`,s75e:`実行を検索`,s767:T`${0} モニター`,s76d:`カスタム列(row_extras)`,s76f:`原因`,s771:T`入力 ${0} は失敗したタスク ${1} の出力`,s77e:T`未実行 ${0} 件`,s786:`トランスクリプト`,s78f:`トークン`,s797:`すべての中を隠す`,s79a:T`未対応のイベント: ${0}`,s79f:T`5 時間枠の利用率 ${0}`,s7a1:`エラーで終了したフロー呼び出し 1 件`,s7a3:`出力ファイル`,s7a4:`権限エラー`,s7b16:`入力ファイルなし`,s7b1c:`修正依頼のあった試行`,s7b3:`検索に一致する実行なし`,s7bf:T`最初のエージェントのセッションの前に各モデルへ送る 1 回のリクエスト(preflight, policy ${0})`,s7c0:T`ホストからの報告なし ${0} 件`,s7c9:`フィルター`,s7cd8:`このタスクの入力 1 件`,s7cd9:`利用できるモデルがなく、最初に応答したモデルで実行する種別(substitute)`,s7cf:`応答が JSON ではない`,s7da:`最終報告`,s7df:T`終了(未実行のタスク ${0} 件)`,s7e:T`ロール ${0}`,s7f:`表示形式`,s803:`ファイル`,s807:`実行 1 件`,s816:`モデル切り替えなし`,s817:`変更したファイル 1 件`,s822:T`以前の試行のモデル: ${0}`,s826:`エージェントのセッションが使ったモデル`,s827:`認証情報が休止中`,s83:T`書き込み ${0}`,s841:`たった今`,s843:T`修正依頼 ${0} 回後`,s84f:`リトライ`,s8512:T`テーマ: ${0}`,s851d:`ファイルの値`,s859:`実行中`,s85e:T`${0}: モデル切り替え`,s863:T`入力 ${0} がありません`,s864:`全体を表示`,s868:T`${2} 年 ${0}〜${1} | ${3}`,s86c:T`ホスト ${0} 台`,s874:T`${0} ステップ完了`,s877:T`${0} 回目の失敗後の、新しいエージェントのセッション`,s87a:`実行されず`,s87b:T`モデル切り替え後に完了: ${0}`,s87c:`修正依頼 1 回後`,s880:`全試行の合計`,s888:`入力`,s88b:`表で表示`,s88e:T`修正依頼 ${0}`,s892:T`入力 ${0}(${1} の出力)がありません`,s89e:`パラメータなし`,s8a56:`なし`,s8a59:T`PID ${0}`,s8ab:`コーディングエージェント`,s8ad:`周回数`,s8ae:T`${0} の記録から再生したエージェントのセッションと、そこに記録した新しいセッション(replay, record_missing)`,s8b1:`リトライしたタスク`,s8bb:`終了したすべての試行から集計(journal.jsonl)`,s8c:T`${0} 分前`,s8d3:`コーディングエージェントが使ったアカウントまたは API キー(credential)`,s8d4:`PID`,s8dd:T`キャッシュ読み込み ${0}`,s8de:`再開後の実行での、新しいエージェントのセッション`,s8df:`オブジェクト`,s8e3:`アシスタント`,s8e6:`Python コードで定義`,s8e9:T`ほか ${0} アカウント`,s8ea:`Tab: 次の行`,s8f1:`選択を解除`,s8f2:`ユニット`,s8f4:`入力と出力(全試行の合計)`,s8f5:`未実行`,s8fa:`未実行(入力ファイルなし、入力ファイルに検証エラー)`,s8fc:T`修正依頼 1 回で完了 | 最初の検証エラー: ${0}`,s900:`ビュー`,s901:`完了したタスク`,s906:`Python タスク`,s90c:T`コンテキストの上限 ${1} の ${0}%`,s90e:`ほかの種別が実装する種別(base_kind)`,s90f:`認証エラー`,s914:T`最大 ${0} 周`,s915:T`モデル ${0} 種類`,s919:T`${0}d ${1}h`,s924:T`モデル ${0}`,s92a:T`依存先タスク ${0} 件の出力待ち`,s92b:T`5 時間枠 ${0}`,s934:`試行 1 回`,s936:`キュー内で同順位のタスクの順序を決める値(priority)`,s93e:`リプレイ`,s941:T`1 日あたり ${0}`,s949:`書き出しの期間`,s94d:`認証情報`,s94e:T`最終更新 ${0}`,s94f0:`実行中のタスク`,s94fd:T`${0} を折りたたむ`,s967:T`失敗 ${0} 件`,s96a:`コンテキストの上限`,s96c:T`出力 ${0}`,s97:T`修正依頼 ${0} 回で完了`,s980:`テキストフィルター`,s9893d9:T`利用率のルール: ${0}`,s9893de:`ホスト 1 台`,s98b:`グループ`,s98f:`入力ファイルなし`,s99:T`${0} 日間`,s9a2:`すべてのプロセス`,s9a4:T`失敗: ${0}`,s9a6:T`Web 検索 ${0} 回`,s9aa:`API 呼び出し 1 回あたりの入力の最大値。キャッシュ読み込みとキャッシュ書き込みを含む(peak_context)`,s9b1a6:`実行中ではありません`,s9b1a9:T`仕上げの種別: ${0}`,s9b3:`報告間隔`,s9b7:`書き込みなし(タスクが失敗)`,s9bd:T`${0} 回目で完了 | 失敗 ${1} 回 | 最初の失敗: ${2}`,s9c3:T`上限を超えた利用: ${0}`,s9c5:T`${0} の出力`,s9c7:`すべての中を表示`,s9cb:`実装する種別`,s9d3:T`${0} 時点の書き出し`,s9d6:`最終応答なしで終了`,s9de:`モデル`,s9e0:T`状態: ${0}`,s9e8:`未実行(入力ファイルに検証エラー)`,s9f0:T`入力 ${0}`,s9f2:`一部のみ完了`,s9f7:`エラー`,s9f92:T`${0} の内部`,s9f97:`料金の上限`,s9fb:`実行`,s9fd:`タスクの開始前からあるファイルも有効`,s9ff:`モデル切り替え`,sa0:`出力を待つ`,sa1:`リプレイした試行`,sa23:`ターン数の上限`,sa24:T`${0} の締め切りまでに終わらない`,sa33:`後続タスクなし`,sa358:`ロール`,sa35c:`試行`,sa36:`モデル別の内訳`,sa39:T`実行中のエージェントのセッションの新しいイベント ${0} 件を表示`,sa3c:`形式`,sa3d:T`週の利用率 ${0}(リセット ${1})`,sa3e:`アカウント全体の値 | エージェントのセッション開始時に取得`,sa3f:`各タスクが読み込むファイル`,sa43:`作成元`,sa48:`コマンドライン`,sa4f:T`最大 ${0} 回`,sa50:`折りたたむ`,sa57:`権限エラーになったツール呼び出し`,sa58:`周回数`,sa62:T`${0}: トランスクリプト`,sa66:T`前の ${0} 行を表示`,sa6a:`開始日`,sa71:`期待する型`,sa74:`縮小(Ctrl + スクロール)`,sa81:`システム設定に合わせる`,sa84:T`新しいイベント ${0} 件を表示`,sa86:T`${0} 時間前`,sa87:`ソースを表示`,sa88:T`${0} の入れ子のループ`,sa8b:`Shift + 矢印キー: 依存先タスク・後続タスク`,sa9b:`タスク詳細`,sa9d:`報告なし`,saa0:`書き込み待ち(タスクが実行中)`,saa2:`理由`,saaa:`5 時間枠の利用率`,saab:`テーマ`,sab5:T`${0} 行目`,sabd:`思考`,sac1:`モニターのサーバーに未接続`,sac7:T`${0} に利用できるモデルなし`,saca:`期間内の実行の合計`,sacc:`可`,sad1:T`ほかに休止中の認証情報 ${0} 件`,sad3:`状態`,sad9:`API リクエストを再送`,sae5:`必須`,sae6:`実行履歴のリトライしたタスク`,saee:`プロセス`,saf2:`すべてのモデルが利用可能`,saf8:`変更したファイルなし`,safd:T`${0} 回目が失敗: ${1}`,sb05:`エラー`,sb06:`実行履歴の修正依頼のあった試行`,sb0c:`サブスクリプションの利用率`,sb0f:`Python タスク 1 回`,sb105:T`未実行: ${0}`,sb106:`検索語`,sb108:`作成、試行の失敗後に削除`,sb14:T`報告なし ${0} 台`,sb1f:`前の 1 行を表示`,sb26a:`登録順`,sb26f:`表示中の階層の外`,sb27:`Enter: 開く`,sb28:`キャッシュ書き込み`,sb31:T`プロンプト(${0} 文字)`,sb34:T`変更したファイル ${0} 件`,sb38:`ツール呼び出し`,sb45:`リトライしたタスク 1 件`,sb4d:`トランスクリプトなし`,sb51:`パイプラインのプロセス内`,sb53:`はい`,sb55:`コーディングエージェントが報告した値`,sb59:T`コンテキストの上限に接近(${0}%)`,sb5a:`未実行`,sb6:`タスク実行中の書き込みが必須`,sb8:`エージェントのセッション 1 回`,sb94:T`5 時間枠(${0})`,sb97:`コンテキストの上限に接近`,sb98:T`${0}: 完了`,sb99:`トークンと料金`,sb9c:T`Python タスク: ${0}`,sba3:`1 周`,sba7:`ほかの出力 1 件`,sba8:`検証を通るファイルを書き込む前に、タスクが失敗`,sbaf:`要素 1 個`,sbb0:T`このバージョンの contraagent が対応していないイベント種別(unread_events): ${0}`,sbb2:`開始時の利用率`,sbb7:T`${1} タスク中 ${0} 件が未完了`,sbb9:`終了`,sbc6:T`${0} 周: ${1}`,sbc9:T`以前の試行のモデル: ${0}`,sbca:`タスクの開始時`,sbcc:`依存先タスクが失敗`,sbd4:`実行を切り替え(r)`,sbd9:`再開後`,sbe2:`実行履歴の失敗した試行`,sbe4:T`${0} の記録から再生したエージェントのセッション(replay)`,sbe9:T`週(${0})`,sbea:`保存対象外(keep_transcripts = false)`,sbf18:`種別のロール`,sbf1d:T`ロック ${0}`,sbf2:`アクティビティなし`,sbf9:`スタブエージェントが台本どおりの応答で処理したタスク(stub)`,sc03:`それ以前`,sc07:`リトライ対象の例外`,sc15:`スキップ`,sc1a:T`待機中 ${0} 件`,sc1b:T`リトライしたタスク ${0} 件`,sc2:`ツール`,sc3:`この期間の実行はありません`,sc4:`タイムアウト`,sc53:`休止した認証情報`,sc54:T`${0} の締め切りを過ぎた`,sc57:T`入力 ${0} に検証エラー`,sc5b:`次のモデルでの新しいエージェントのセッション`,sc61:T`週 ${0}`,sc65:`縮小`,sc68:`日時`,sc6c:T`書き込まれていない出力 ${0} 件(タスクが未実行)`,sc6e:`締め切りまでに終わらない`,sc6f:T`エラーで終了したフロー呼び出し ${0} 件`,sc73:`開始`,sc79:`タスク`,sc7d:`同時実行(上限)`,sc87a:T`警告のしきい値: ${0}`,sc87d:T`終了 ${0}`,sc92:`空き`,sc94:`全体`,sc97:`タイムゾーン`,sc9e:`その他`,sca4:`プロセスなし`,sca6:`プレビューを表示`,sca7:`ロール`,scb8:`終了(未完了のタスク 1 件)`,scb9:`最終試行の終了時刻`,scbd:`全文`,scca:T`最も高い種別: ${0}`,sccc:`モデルが応答を拒否`,scd2:T`${0}: ${1} → 次のモデル`,scd94:`エージェントの所要時間`,scd9c:T`優先度 ${0}`,scdb:`Esc: 選択を解除`,scde:`ループ`,scf41:T`完了 ${0} 件`,scf43:T`入力 ${0} は失敗したタスクの出力`,scf70:`レート制限`,scf71:`失敗した試行の後の試行(retries)`,sd05:T`締め切り ${0}`,sd0e:`出来事`,sd17:`入力 / 出力 | キャッシュ読み込み / キャッシュ書き込み`,sd1f:`ファイルの検証に使うスキーマ`,sd2:T`${0} 件を同時実行`,sd38:`変更`,sd3c:`登録済みのタスクなし`,sd3e:T`終了(未完了のタスク ${0} 件)`,sd4:`ローカルの認証情報(ambient)`,sd58:`終了(失敗したタスク 1 件)`,sd5d:T`トークン: 入力 ${0}、出力 ${1}、キャッシュ読み込み ${2}、キャッシュ書き込み ${3}`,sd5e:`所要時間の合計`,sd73:`失敗`,sd744:`検証対象のファイル`,sd747:`なし(任意)`,sd75:`検証エラー`,sd776:T`全体の ${0}%`,sd77d:`実行中のエージェントのセッションの新しいイベント 1 件を表示`,sd79:`結果を受けて作成`,sd7d:T`入力 ${0}(${1} の出力)に検証エラー`,sd82:`タスクの開始前からあるファイルは無効`,sd8a:T`${0} まで`,sd93:T`依存先タスク ${0} の出力待ち`,sd95:T`一部のみ完了: ${0}`,sd96:`中を隠す`,sda2:T`セッション開始時の利用率: ${0}`,sda80:T`すべて表示(${0} 文字)`,sda8d:`最大コンテキストが警告のしきい値を超えた(context_warned)`,sdb1:`入力`,sdb4:`イベントが途絶えた`,sdb8:`出力に検証エラー`,sdc:T`実行グループ ${0}`,sdd1:`モニターから応答がありません`,sdd4:`モデル 1 種類`,sdd8:`修正依頼なし`,sddf:`ビューを表示`,sde:T`アカウント ${0}`,sdf1:T`${0} 回目で完了 | 失敗 1 回 | 最初の失敗: ${1}`,sdf4:`リトライなし`,sdf9:`リトライ後に完了`,se0e6:T`${0} から休止中`,se0ed:T`実行されず: ${0}`,se17:T`必要な時間 ${0}`,se1a:`作成`,se21:`指標`,se27:`タスクを実行した CLI(claude、omp)`,se2b:T`キー ${0} 個: ${1}`,se2c:T`期待する型: ${0}`,se3:`キーボードショートカット`,se4:`修正依頼のあったタスク 1 件`,se55:`エージェントのセッションの所要時間の合計`,se5a:`モデル切り替え`,se5b:`推移`,se5d:`monitor.Panel`,se60:`ハイコントラスト`,se61:`パイプラインのプロセス内の関数`,se66:`1 タスク`,se6d:`下の階層あり`,se71:T`${0} 回目`,se75:`リプレイと新しいセッション`,se90:`認証情報`,se99d:`ロック`,se99f:T`終了(失敗したタスク ${0} 件)`,sea2:`期間`,sea4:`定義`,sea6:`矢印キー: マーク`,sea74:T`${0} タスク`,sea7b:`実行の一覧`,seac:`待機中`,seb0:`グラフで表示`,seb2:`締め切りと仕上げの猶予を過ぎた`,seba:`既定`,sec2:`すべての種別`,sec7:`コーディングエージェントが使ったエージェント定義(agents/<role>.md)`,secc:`上限に到達`,secf:T`${0}の利用率 ${1}`,sed05:`コーディングエージェントが報告した料金(試行が終わった日に計上)`,sed0a:`タスクごとに 1 つ(Backend.run)`,sed7:`種別または関数`,sed8:`合計`,sede:`ステージなし`,seea0:`結果`,seea1:`ホスト ID なし`,seee1:`スキップ`,seee3:`完了しなかった試行`,sef0:T`実行中 ${0} 件`,sefc:`言語`,sf03:`所要時間の中央値`,sf06:T`タスクは ${0} 回目で完了`,sf08:`すべてのエージェントのセッションの合計(同時に実行した分も含む)`,sf11:`終了時刻`,sf14:`最初のエージェントのセッション`,sf26:T`実行 ${0} 件`,sf2b:`トークンの報告なし`,sf2c:`すべての試行が完了`,sf2d:T`関数 ${0}`,sf2e:`定義`,sf39:`周回数`,sf3c:`ほか 1 アカウント`,sf3e:`カスタムビュー`,sf46:T`${0} 周目`,sf48:`終了後の利用率`,sf56:`試行の終了後に、同じアカウントで最初に報告された値`,sf5d:`ユニットごとではなく、実行ごとに 1 回実行されるタスク`,sf6:`フロー呼び出し`,sf7b:T`不明(${0})`,sf7d:T`残り ${0}`,sf7e:`すべての実行グループ`,sf8:T`休止 ${0} → ${1}`,sf93:`合計`,sf9b:`エージェントのセッションが始まらなかった`,sfa0:`テキスト`,sfa2:T`${0} 〜 ${1}`,sfa6:`フィルターに一致するタスクなし`,sfad:`修正依頼 1 回で完了`,sfae:`ホスト一覧`,sfb3:`実行を切り替え`,sfb6:T`実行中のエージェントのセッション ${0} 件`,sfbb:`失敗した試行`,sfc:`再開カーソルなし`,sfd3:T`リトライ後に完了 ${0} 件`,sfd5:T`要素 ${0} 個: ${1}`,sfd7:`出力`,sfd85:`タスクの前から変わらない出力ファイルの箇所(preserve)`,sfd8b:`各日の最大値`,sfdd:`プロセス`,sfde:`ファイルにない必須フィールド`,sfe7:T`${0}: 入力と出力`,sfe9:T`プロセス ${0}`,sff6:`登録済みのタスクはまだありません`,sff8:T`${0} のタスク`,sffa:`定義なし`,sfff:T`Python タスク ${0} 回`,stag:`完了`,stat:`状態`,"stop-c":`完了`,"stop-i":`未実行`,"stop-p":`一部のみ完了`,tab:`タスク`,tas:`タスク`,tok:`出力`,too:`完了`,"trends-p":`一部のみ完了`,"trends-r":`実行`,"view-g":`グラフ`,"view-o":`出力`,"view-t":`表`}),Tn=`en`,En=[`ja`],Dn=[`en`,`ja`],On={en:`English`,ja:`日本語`},kn={ja:()=>Promise.resolve(Cn)};function An(){if(Sn===void 0)try{Sn=at({sourceLocale:Tn,targetLocales:En,loadLocale:e=>kn[e]()})}catch{Sn=null}return Sn!==null}var jn=()=>Sn?.getLocale()??Tn;async function Mn(e){An()&&await Sn.setLocale(e)}var Nn=`contraagent:locale`,Pn=e=>Dn.includes(e);function Fn(){try{let e=globalThis.localStorage?.getItem(Nn);if(Pn(e))return e}catch{}for(let e of globalThis.navigator?.languages??[]){let t=e.toLowerCase().split(`-`)[0];if(Pn(t))return t}return Tn}async function In(e){try{globalThis.localStorage?.setItem(Nn,e)}catch{}await Mn(e)}var Ln=`contraagent`,Rn=null,zn=``,Bn=null,Vn=!1;function Hn(){let e=globalThis.history?.state;return e&&typeof e==`object`?e:{}}function Un(){let e=Hn()[Ln];return e&&typeof e==`object`?e:{}}function Wn(){Bn&&clearTimeout(Bn),Bn=null;let e=Rn;Rn=null,e&&globalThis.history&&Un().entry===zn&&history.replaceState({...Hn(),[Ln]:{...Un(),...e}},``)}function Gn(){Wn()}var Kn={recall:function(e){if(globalThis.history)return Rn&&zn===Un().entry&&e in Rn?Rn[e]:Un()[e]},remember:function(e,t){if(!globalThis.history)return;let n=function(){let e=Un().entry;if(e)return e;let t=Math.random().toString(36).slice(2);return history.replaceState({...Hn(),[Ln]:{...Un(),entry:t}},``),t}();Rn&&zn!==n&&(Rn=null),zn=n,(Rn??={})[e]=t,Bn??=setTimeout(Wn,200),Vn||(Vn=!0,globalThis.addEventListener?.(`pagehide`,Gn))}},qn=class{constructor(){this.values=new Map}recall(e){return this.values.get(e)}remember(e,t){this.values.set(e,t)}},Jn=new WeakMap;function Yn(e,t){t?Jn.set(e,t):Jn.delete(e)}function Xn(e){for(let t=e;t;t=t.parentNode??t.host){let e=Jn.get(t);if(e)return e}return Kn}var Zn=class{constructor(e,t){this.id=e,this.from=t,this.items=null}get memory(){return Xn(this.from)}get loaded(){return this.items??=new Set(this.memory.recall(this.id)??[])}has(e){return this.loaded.has(e)}set(e,t){let n=this.loaded;t!==n.has(e)&&(t?n.add(e):n.delete(e),this.memory.remember(this.id,[...n]))}values(){return[...this.loaded]}clear(){this.loaded.size&&(this.loaded.clear(),this.memory.remember(this.id,[]))}},Qn=class{constructor(e){this.id=e;let t=null;try{t=JSON.parse(globalThis.sessionStorage?.getItem(`${Ln}:${e}`)??`null`)}catch{}this.items=new Set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])}has(e){return this.items.has(e)}set(e,t){if(t!==this.items.has(e)){t?this.items.add(e):this.items.delete(e);try{globalThis.sessionStorage?.setItem(`${Ln}:${this.id}`,JSON.stringify([...this.items]))}catch{}}}},$n=[`wheel`,`touchstart`,`pointerdown`,`keydown`],er=class{constructor(e,t=()=>Kn){this.id=e,this.memory=t,this.el=null,this.frame=0,this.restoring=!1,this.cancel=()=>{if(cancelAnimationFrame(this.frame),this.frame=0,this.restoring){this.restoring=!1;for(let e of $n)this.el?.removeEventListener(e,this.cancel)}},this.onScroll=()=>{!this.restoring&&this.el&&this.memory().remember(this.id,Math.round(this.el.scrollTop))}}attach(e){this.el!==e&&(this.detach(),this.el=e,e.addEventListener(`scroll`,this.onScroll,{passive:!0}))}detach(){this.cancel(),this.el?.removeEventListener(`scroll`,this.onScroll),this.el=null}restore(){let e=this.el;if(!e)return;this.cancel();let t=this.memory().recall(this.id)??0;if(t<=0)return void(e.scrollTop=0);let n=performance.now()+6e3;this.restoring=!0;for(let t of $n)e.addEventListener(t,this.cancel,{passive:!0,once:!0});let r=()=>{let i=e.scrollHeight-e.clientHeight;if(e.scrollTop=Math.min(t,i),i>=t||performance.now()>n)return this.cancel();this.frame=requestAnimationFrame(r)};r()}reset(){this.cancel(),this.el&&(this.el.scrollTop=0)}},tr=[`overview`,`tasks`,`journal`,`outputs`,`definitions`,`procs`,`stream`],nr=[`transcript`,`input`,`output`,`definition`],rr=[7,14,30],ir={page:``,run:``,tab:`overview`,key:null,view:`transcript`,round:null,def:null,kind:``,stop:``,q:``,layer:``,unit:``,sel:``,days:14,from:``,to:``,tz:``,group:``,trendsTab:``},ar=e=>tr.includes(e)||/^panel:.+/.test(e),or=e=>nr.includes(e);function sr(e){let t=new URLSearchParams(e),n=t.get(`tab`)??``,r=t.get(`view`)??``,i=Number(t.get(`round`)),a=t.get(`page`)===`hosts`?`hosts`:t.get(`page`)===`trends`?`trends`:``,o=t.get(`from`)??``,s=t.get(`to`)??``,c=/^\d{4}-\d{2}-\d{2}$/.test(o)&&/^\d{4}-\d{2}-\d{2}$/.test(s),l=Number(t.get(`days`));return{page:a,run:a?``:t.get(`run`)??``,tab:a!==`trends`&&ar(n)?n:`overview`,key:t.get(`key`)||null,view:or(r)?r:`transcript`,round:Number.isInteger(i)&&i>0?i:null,def:t.get(`def`)||null,kind:t.get(`kind`)??``,stop:t.get(`stop`)??``,q:t.get(`q`)??``,layer:t.get(`layer`)??``,unit:t.get(`unit`)??``,sel:t.get(`sel`)??``,days:c?0:rr.includes(l)?l:ir.days,from:c?o:``,to:c?s:``,tz:t.get(`tz`)??``,group:t.get(`group`)??``,trendsTab:a===`trends`?t.get(`tab`)??``:``}}function cr(e){if(e.page===`hosts`)return`?page=hosts`;if(e.page===`trends`){let t=new URLSearchParams({page:`trends`});return e.days===0&&e.from&&e.to?(t.set(`from`,e.from),t.set(`to`,e.to)):e.days!==ir.days&&t.set(`days`,String(e.days)),e.tz&&t.set(`tz`,e.tz),e.group&&t.set(`group`,e.group),e.trendsTab&&t.set(`tab`,e.trendsTab),`?${t.toString()}`}let t=new URLSearchParams;e.run&&t.set(`run`,e.run),e.tab!==`overview`&&t.set(`tab`,e.tab),e.tab===`stream`&&(e.key&&t.set(`key`,e.key),e.view!==`transcript`&&t.set(`view`,e.view),e.round!=null&&t.set(`round`,String(e.round))),e.tab===`definitions`&&e.def&&t.set(`def`,e.def),e.tab===`overview`&&e.layer&&t.set(`layer`,e.layer),e.tab===`overview`&&e.unit&&t.set(`unit`,e.unit),e.tab===`overview`&&e.sel&&t.set(`sel`,e.sel);let n=e.tab===`tasks`||e.tab===`journal`;n&&e.kind&&t.set(`kind`,e.kind),e.tab===`journal`&&e.stop&&t.set(`stop`,e.stop),n&&e.q&&t.set(`q`,e.q);let r=t.toString();return r?`?${r}`:``}function lr(e,t){let n={...e,...t};return t.run!==void 0&&t.run!==e.run&&Object.assign(n,{key:null,def:null,round:null,layer:``,unit:``,sel:``,...t}),t.layer!==void 0&&t.layer!==e.layer&&t.sel===void 0&&(n.sel=``),t.key!==void 0&&t.key!==e.key&&(t.view===void 0&&(n.view=`transcript`),t.round===void 0&&(n.round=null)),n}function ur(e,t){let n=e=>cr({...e,kind:``,stop:``,q:``,unit:``,sel:``});return n(e)!==n(t)}var dr=class{constructor(e,t,n,r=()=>{}){this.mode=e,this.onChange=t,this.onLeave=r,this.onPop=()=>{this.current=sr(location.search),this.onChange(this.current,`pop`)};let i=sr(e===`url`?location.search:``);this.current=lr(i,n??{})}get viewRoute(){return this.current}start(){this.mode===`url`&&(history.scrollRestoration=`manual`,addEventListener(`popstate`,this.onPop)),this.onChange(this.current,`init`)}stop(){this.mode===`url`&&removeEventListener(`popstate`,this.onPop)}navigate(e,t={}){let n=lr(this.current,e);if(cr(n)===cr(this.current))return;let r=!t.replace&&ur(this.current,n);if(this.current=n,this.mode===`url`){let e=`${location.pathname}${cr(n)}${location.hash}`;r?(this.onLeave(),history.pushState({},``,e)):history.replaceState(history.state,``,e)}this.onChange(n,r?`push`:`replace`)}},fr=class{constructor(e,t){this.host=e,this.opts=t,this.ready=Promise.resolve(),e.addController(this)}hostConnected(){let e=this.opts.locale();this.ready=Mn(Pn(e)?e:Fn()).catch(()=>{})}hostUpdated(){let e=this.opts.locale();e!==this.seen&&(this.seen=e,Pn(e)&&e!==jn()&&Mn(e)),this.opts.pageWide()&&(document.documentElement.lang=jn()),this.host.lang=jn()}},pr=class{constructor(e,t,n){this.host=e,this.onKey=t,this.scope=n,this.bound=null,this.boundScope=`off`,this.listener=e=>{let t=e;t.defaultPrevented||function(e){let t=e.composedPath()[0];return t instanceof HTMLElement&&(t.isContentEditable||t.matches(`input, select, textarea, [contenteditable]:not([contenteditable="false"])`))}(t)||t.metaKey||t.ctrlKey||t.altKey||this.onKey(t)},e.addController(this)}hostConnected(){this.bind()}hostUpdated(){this.scope()!==this.boundScope&&this.bind()}hostDisconnected(){this.unbind()}bind(){this.unbind();let e=this.scope();this.boundScope=e,this.bound=e===`page`?document:e===`element`?this.host:null,this.bound?.addEventListener(`keydown`,this.listener)}unbind(){this.bound?.removeEventListener(`keydown`,this.listener),this.bound=null,this.boundScope=`off`}},mr=[{name:`backdrop`,prop:`--ca-backdrop`},{name:`bg`,prop:`--ca-bg`},{name:`card`,prop:`--ca-card`},{name:`panel`,prop:`--ca-panel`},{name:`panel2`,prop:`--ca-panel2`},{name:`raise`,prop:`--ca-raise`},{name:`well`,prop:`--ca-well`},{name:`track`,prop:`--ca-track`},{name:`line`,prop:`--ca-line`},{name:`line2`,prop:`--ca-line2`},{name:`shadow`,prop:`--ca-shadow`},{name:`text`,prop:`--ca-text`},{name:`text-2`,prop:`--ca-text-secondary`},{name:`text-muted`,prop:`--ca-text-muted`},{name:`accent`,prop:`--ca-accent`},{name:`accent-bg`,prop:`--ca-accent-bg`,derive:`color-mix(in srgb, var(--accent) calc(var(--tint) + 1%), transparent)`},{name:`focus`,prop:`--ca-focus`},{name:`focus-width`,prop:`--ca-focus-width`},{name:`selection`,prop:`--ca-selection`},{name:`status-failed`,prop:`--ca-status-failed`},{name:`status-failed-bg`,prop:`--ca-status-failed-bg`,derive:`color-mix(in srgb, var(--status-failed) var(--tint), transparent)`},{name:`status-attention`,prop:`--ca-status-attention`},{name:`status-attention-bg`,prop:`--ca-status-attention-bg`,derive:`color-mix(in srgb, var(--status-attention) var(--tint), transparent)`},{name:`status-done`,prop:`--ca-status-done`},{name:`status-done-bg`,prop:`--ca-status-done-bg`,derive:`color-mix(in srgb, var(--status-done) var(--tint), transparent)`},{name:`status-running`,prop:`--ca-status-running`},{name:`status-running-bg`,prop:`--ca-status-running-bg`,derive:`color-mix(in srgb, var(--status-running) var(--tint), transparent)`},{name:`status-muted`,prop:`--ca-status-muted`},{name:`status-muted-bg`,prop:`--ca-status-muted-bg`,derive:`color-mix(in srgb, var(--status-muted) calc(var(--tint) - 1%), transparent)`},{name:`tint`,prop:`--ca-tint`},{name:`agent`,prop:`--ca-agent`},{name:`agent-bg`,prop:`--ca-agent-bg`,derive:`color-mix(in srgb, var(--agent) calc(var(--tint) + 2%), transparent)`},{name:`meter`,prop:`--ca-meter`},{name:`tok-input`,prop:`--ca-tok-input`},{name:`tok-cache-read`,prop:`--ca-tok-cache-read`},{name:`tok-cache-write`,prop:`--ca-tok-cache-write`},{name:`tok-output`,prop:`--ca-tok-output`},{name:`series-1`,prop:`--ca-series-1`},{name:`series-2`,prop:`--ca-series-2`},{name:`series-3`,prop:`--ca-series-3`},{name:`series-4`,prop:`--ca-series-4`},{name:`series-5`,prop:`--ca-series-5`},{name:`series-6`,prop:`--ca-series-6`},{name:`code-keyword`,prop:`--ca-code-keyword`},{name:`code-string`,prop:`--ca-code-string`},{name:`code-number`,prop:`--ca-code-number`},{name:`code-constant`,prop:`--ca-code-constant`},{name:`code-comment`,prop:`--ca-code-comment`},{name:`code-function`,prop:`--ca-code-function`},{name:`code-type`,prop:`--ca-code-type`},{name:`code-name`,prop:`--ca-code-name`},{name:`font-size-xs`,prop:`--ca-font-size-xs`,derive:`10px`},{name:`font-size-sm`,prop:`--ca-font-size-sm`,derive:`11px`},{name:`font-size-md`,prop:`--ca-font-size-md`,derive:`12px`},{name:`font-size-lg`,prop:`--ca-font-size-lg`,derive:`13px`},{name:`font-size-xl`,prop:`--ca-font-size-xl`,derive:`15px`},{name:`font-size-2xl`,prop:`--ca-font-size-2xl`,derive:`28px`},{name:`radius-sm`,prop:`--ca-radius-sm`,derive:`4px`},{name:`radius-md`,prop:`--ca-radius-md`,derive:`8px`},{name:`radius-lg`,prop:`--ca-radius-lg`,derive:`12px`},{name:`radius-pill`,prop:`--ca-radius-pill`,derive:`999px`}],hr=[`contraagent-dark`,`contraagent-light`,`github-dark`,`github-light`,`one-dark`,`nord`,`high-contrast`],gr=[`contraagent-dark`,`contraagent-light`,`system`,`github-dark`,`github-light`,`one-dark`,`nord`,`high-contrast`],_r=[`github-dark`,`github-light`,`one-dark`,`nord`,`high-contrast`],vr=`contraagent-dark`,yr={"contraagent-dark":{label:`contraagent Dark`,scheme:`dark`,tokens:{backdrop:`radial-gradient(1100px 520px at 8% -12%, #10203a 0%, transparent 62%), radial-gradient(900px 480px at 108% 4%, #1b1238 0%, transparent 58%), #060a11`,bg:`#060a11`,card:`#0f1724`,panel:`#0f1724`,panel2:`#142034`,raise:`#1a2740`,well:`#0a111c`,track:`#1b273b`,line:`#1d2940`,line2:`#2b3c58`,shadow:`#060a11`,text:`#e7edf5`,"text-2":`#bcc7d6`,"text-muted":`#909db2`,accent:`#7aa2ff`,focus:`#7aa2ff`,"focus-width":`2px`,selection:`#7aa2ff4d`,"status-failed":`#f87171`,"status-attention":`#fbbf24`,"status-done":`#34d399`,"status-running":`#22d3ee`,"status-muted":`#94a3b8`,tint:`13%`,agent:`#b597fb`,meter:`#7d8ba3`,"tok-input":`#7c86f5`,"tok-cache-read":`#3f4d63`,"tok-cache-write":`#8796ad`,"tok-output":`#d6b8ff`,"series-1":`#3987e5`,"series-2":`#d95926`,"series-3":`#199e70`,"series-4":`#c98500`,"series-5":`#d55181`,"series-6":`#008300`,"code-keyword":`#c4a5ff`,"code-string":`#7ee2a8`,"code-number":`#f5c26b`,"code-constant":`#ff9e64`,"code-comment":`#74839a`,"code-function":`#7dd3fc`,"code-type":`#ffd479`,"code-name":`#79b8ff`}},"contraagent-light":{label:`contraagent Light`,scheme:`light`,tokens:{backdrop:`radial-gradient(1100px 520px at 8% -12%, #dde7fb 0%, transparent 62%), radial-gradient(900px 480px at 108% 4%, #ebe3fa 0%, transparent 58%), #eef2f8`,bg:`#eef2f8`,card:`#ffffff`,panel:`#ffffff`,panel2:`#f7f9fc`,raise:`#e6ecf5`,well:`#f3f6fa`,track:`#e1e7f0`,line:`#d6dde8`,line2:`#b6c2d3`,shadow:`#0f172438`,text:`#0f1724`,"text-2":`#34415a`,"text-muted":`#556279`,accent:`#2f58d4`,focus:`#2f58d4`,"focus-width":`2px`,selection:`#2f58d42e`,"status-failed":`#b8132d`,"status-attention":`#6c4801`,"status-done":`#026b49`,"status-running":`#01525f`,"status-muted":`#56637a`,tint:`11%`,agent:`#6f45c0`,meter:`#8a97ab`,"tok-input":`#4d4cc8`,"tok-cache-read":`#cdd6e3`,"tok-cache-write":`#7d8aa0`,"tok-output":`#a07ad9`,"series-1":`#2a78d6`,"series-2":`#eb6834`,"series-3":`#1baf7a`,"series-4":`#eda100`,"series-5":`#e87ba4`,"series-6":`#008300`,"code-keyword":`#6f49a8`,"code-string":`#076b40`,"code-number":`#7b5605`,"code-constant":`#964605`,"code-comment":`#5d6b80`,"code-function":`#086586`,"code-type":`#785902`,"code-name":`#095ea8`}},"github-dark":{label:`GitHub Dark`,scheme:`dark`,tokens:{backdrop:`#010409`,bg:`#010409`,card:`#0d1117`,panel:`#0d1117`,panel2:`#151b23`,raise:`#212830`,well:`#010409`,track:`#262c36`,line:`#262c36`,line2:`#3d444d`,shadow:`#010409`,text:`#f0f6fc`,"text-2":`#d1d7e0`,"text-muted":`#9299a2`,accent:`#4796fb`,focus:`#1f6feb`,"focus-width":`2px`,selection:`#388bfd4d`,"status-failed":`#fc554d`,"status-attention":`#d29922`,"status-done":`#3fb950`,"status-running":`#39c5cf`,"status-muted":`#9198a1`,tint:`15%`,agent:`#ab7df8`,meter:`#656c76`,"tok-input":`#58a6ff`,"tok-cache-read":`#2f3742`,"tok-cache-write":`#656c76`,"tok-output":`#d2a8ff`,"series-1":`#3987e5`,"series-2":`#d95926`,"series-3":`#199e70`,"series-4":`#c98500`,"series-5":`#d55181`,"series-6":`#008300`,"code-keyword":`#ff7b72`,"code-string":`#a5d6ff`,"code-number":`#79c0ff`,"code-constant":`#79c0ff`,"code-comment":`#9198a1`,"code-function":`#d2a8ff`,"code-type":`#ffa657`,"code-name":`#7ee787`}},"github-light":{label:`GitHub Light`,scheme:`light`,tokens:{backdrop:`#f6f8fa`,bg:`#f6f8fa`,card:`#ffffff`,panel:`#ffffff`,panel2:`#ffffff`,raise:`#eff2f5`,well:`#f6f8fa`,track:`#e6eaef`,line:`#d1d9e0`,line2:`#b7c0ca`,shadow:`#1f232833`,text:`#1f2328`,"text-2":`#393f46`,"text-muted":`#59636e`,accent:`#0165d6`,focus:`#0165d6`,"focus-width":`2px`,selection:`#0969da33`,"status-failed":`#cd1e2b`,"status-attention":`#916103`,"status-done":`#147b33`,"status-running":`#10767d`,"status-muted":`#59636e`,tint:`8%`,agent:`#804ddc`,meter:`#818b98`,"tok-input":`#54aeff`,"tok-cache-read":`#d1d9e0`,"tok-cache-write":`#818b98`,"tok-output":`#a475f9`,"series-1":`#2a78d6`,"series-2":`#eb6834`,"series-3":`#1baf7a`,"series-4":`#eda100`,"series-5":`#e87ba4`,"series-6":`#008300`,"code-keyword":`#cf222e`,"code-string":`#0a3069`,"code-number":`#0550ae`,"code-constant":`#0550ae`,"code-comment":`#59636e`,"code-function":`#6639ba`,"code-type":`#953800`,"code-name":`#116329`}},"one-dark":{label:`One Dark`,scheme:`dark`,tokens:{backdrop:`#21252b`,bg:`#21252b`,card:`#282c34`,panel:`#282c34`,panel2:`#2c313a`,raise:`#2c313a`,well:`#21252b`,track:`#3a3f4b`,line:`#181a1f`,line2:`#4b5263`,shadow:`#0e1013`,text:`#d7dae0`,"text-2":`#abb2bf`,"text-muted":`#a7afbe`,accent:`#64b2f2`,focus:`#528bff`,"focus-width":`2px`,selection:`#3e4451`,"status-failed":`#fc858d`,"status-attention":`#e5c07b`,"status-done":`#98c379`,"status-running":`#57b7c3`,"status-muted":`#a7afbe`,tint:`12%`,agent:`#d788ee`,meter:`#5c6370`,"tok-input":`#61afef`,"tok-cache-read":`#3e4451`,"tok-cache-write":`#5c6370`,"tok-output":`#c678dd`,"series-1":`#3987e5`,"series-2":`#d95926`,"series-3":`#199e70`,"series-4":`#c98500`,"series-5":`#d55181`,"series-6":`#008300`,"code-keyword":`#c678dd`,"code-string":`#98c379`,"code-number":`#d19a66`,"code-constant":`#d19a66`,"code-comment":`#8f949e`,"code-function":`#61afef`,"code-type":`#e5c07b`,"code-name":`#e36e77`}},nord:{label:`Nord`,scheme:`dark`,tokens:{backdrop:`#2e3440`,bg:`#242933`,card:`#2e3440`,panel:`#2e3440`,panel2:`#323946`,raise:`#3b4252`,well:`#272c36`,track:`#3b4252`,line:`#3b4252`,line2:`#4c566a`,shadow:`#1d2129`,text:`#eceff4`,"text-2":`#d8dee9`,"text-muted":`#adbcd9`,accent:`#9dbedf`,focus:`#88c0d0`,"focus-width":`2px`,selection:`#4c566a`,"status-failed":`#fe9aa1`,"status-attention":`#ebcb8b`,"status-done":`#a5c18e`,"status-running":`#89c1d1`,"status-muted":`#adbcd9`,tint:`13%`,agent:`#d0a9c9`,meter:`#7b88a1`,"tok-input":`#5e81ac`,"tok-cache-read":`#4c566a`,"tok-cache-write":`#7b88a1`,"tok-output":`#b48ead`,"series-1":`#3987e5`,"series-2":`#d95926`,"series-3":`#199e70`,"series-4":`#c98500`,"series-5":`#d55181`,"series-6":`#008300`,"code-keyword":`#81a1c1`,"code-string":`#a3be8c`,"code-number":`#b790b0`,"code-constant":`#d38972`,"code-comment":`#8f9db8`,"code-function":`#88c0d0`,"code-type":`#8fbcbb`,"code-name":`#8fbcbb`}},"high-contrast":{label:`High contrast`,scheme:`dark`,tokens:{backdrop:`#010409`,bg:`#010409`,card:`#0a0c10`,panel:`#0a0c10`,panel2:`#0a0c10`,raise:`#1c2128`,well:`#010409`,track:`#272b33`,line:`#7a828e`,line2:`#9ea7b3`,shadow:`#000000`,text:`#ffffff`,"text-2":`#f0f3f6`,"text-muted":`#bdc4cc`,accent:`#7abbfe`,focus:`#7abbfe`,"focus-width":`3px`,selection:`#409eff66`,"status-failed":`#ffacb8`,"status-attention":`#fad209`,"status-done":`#0ef38e`,"status-running":`#62ceff`,"status-muted":`#bdc4cc`,tint:`12%`,agent:`#c299fe`,meter:`#9ea7b3`,"tok-input":`#409eff`,"tok-cache-read":`#525964`,"tok-cache-write":`#9ea7b3`,"tok-output":`#dbb7ff`,"series-1":`#3987e5`,"series-2":`#d95926`,"series-3":`#199e70`,"series-4":`#c98500`,"series-5":`#d55181`,"series-6":`#008300`,"code-keyword":`#ff9492`,"code-string":`#addcff`,"code-number":`#91cbff`,"code-constant":`#91cbff`,"code-comment":`#bdc4cc`,"code-function":`#dbb7ff`,"code-type":`#ffb757`,"code-name":`#72f088`}}},br=Object.fromEntries(mr.map(e=>[e.name,e.prop])),xr=e=>`:where([data-ca-theme="${e}"])`;function Sr(e=xr){return hr.map(t=>{let n=yr[t],r=Object.entries(n.tokens).map(([e,t])=>`${br[e]}: ${t};`);return`${e(t)} { color-scheme: ${n.scheme}; --ca-color-scheme: ${n.scheme}; ${r.join(` `)} }`}).join(`
|
|
6
|
+
`)}var Cr=e=>gr.includes(e);function wr(e,t){return e===`system`?t?`contraagent-light`:`contraagent-dark`:(e=>hr.includes(e))(e)?e:vr}var Tr=`contraagent:theme`,Er=()=>{try{return globalThis.localStorage}catch{return}},Dr=pt(Sr()),Or=pt(Sr(e=>`:host([data-ca-theme="${e}"])`)),kr=new WeakSet,Ar=class{constructor(e,t){this.host=e,this.opts=t,this.light=globalThis.matchMedia?.(`(prefers-color-scheme: light)`).matches??!1,this.stop=null,e.addController(this)}get choice(){let e=this.opts.theme();return Cr(e)?e:function(e=Er()){try{let t=e?.getItem(Tr);if(Cr(t))return t}catch{}return vr}()}get shown(){return wr(this.choice,this.light)}get system(){return wr(`system`,this.light)}hostConnected(){this.apply();let e=globalThis.matchMedia?.(`(prefers-color-scheme: light)`);if(!e)return;let t=e=>{this.light=e.matches,this.host.requestUpdate()};e.addEventListener(`change`,t),this.stop=()=>e.removeEventListener(`change`,t)}hostDisconnected(){this.stop?.(),this.stop=null}hostUpdated(){this.apply()}apply(){let e=this.shown;this.host.getAttribute(`data-ca-theme`)!==e&&this.host.setAttribute(`data-ca-theme`,e),this.opts.pageWide()&&document.documentElement.getAttribute(`data-ca-theme`)!==e&&document.documentElement.setAttribute(`data-ca-theme`,e)}},I=e=>e&&e!==`neutral`?e:j;function L(e,t,n){return e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}function jr(e,t){let n={...e};if(t)for(let[e,r]of Object.entries(t))r!==void 0&&(n[e]=r);return n}function R(e,t){customElements.get(e)||customElements.define(e,t)}function z(e){if(e==null||Number.isNaN(e))return`—`;let t=Math.max(0,e);if(t<.05)return`<0.1s`;if(t<9.95)return`${t.toFixed(1)}s`;let n=Math.round(t);return n<60?`${n}s`:n<3600?`${Math.floor(n/60)}m ${String(n%60).padStart(2,`0`)}s`:`${Math.floor(n/3600)}h ${String(Math.floor(n%3600/60)).padStart(2,`0`)}m`}var B=e=>String(e??``).replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`),Mr=new Set,Nr=null;function Pr(){for(let e of Mr)e.requestUpdate()}var Fr=class{constructor(e){this.host=e,e.addController(this)}hostConnected(){Mr.add(this.host),Nr??=setInterval(Pr,1e3)}hostDisconnected(){Mr.delete(this.host),!Mr.size&&Nr&&(clearInterval(Nr),Nr=null)}},Ir=new class{constructor(){this.seen=new Map}at(e,t,n=Date.now()){let r=Math.round(n-1e3*t),i=this.seen.get(e);return i!==void 0&&Math.abs(i-r)<5e3?i:(this.seen.set(e,r),r)}},Lr=O` .tag{font-size:var(--font-size-xs);padding:0 7px;border-radius:var(--radius-pill);border:1px solid var(--line2);color:var(--text-muted);white-space:nowrap;}.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}.chip{font-size:var(--font-size-sm);padding:1px 8px;border-radius:var(--radius-pill);border:1px solid var(--line);color:var(--text-muted);white-space:nowrap;}.chip[data-tone='done']{color:var(--text-2);}.chip[data-tone='done']>[aria-hidden]{color:var(--tone);font-weight:700;}.chip[data-tone='running']{background:var(--tone);color:var(--bg);border-color:var(--tone);font-weight:600;animation:ping 1.6s var(--ease) infinite;}.chip.todo{opacity:0.65;}.taskchip{display:inline-block;font:inherit;font-family:var(--mono);font-size:var(--font-size-sm);line-height:1.5;padding:0 8px;border-radius:var(--radius-pill);border:1px solid var(--line);background:var(--raise);color:var(--text-2);white-space:nowrap;}button.taskchip{cursor:pointer;}button.taskchip:hover{border-color:var(--accent);color:var(--text);}.kbd{font-family:var(--mono);font-size:var(--font-size-xs);border:1px solid var(--line2);border-bottom-width:2px;border-radius:var(--radius-sm);padding:0 4px;color:var(--text-muted);}`,Rr=O` .g12{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:14px;container-type:inline-size;}.c12{grid-column:span 12;}.c7{grid-column:span 7;}.c5{grid-column:span 5;}@container (max-width:1100px){.c7,.c5{grid-column:span 12;}}.panel{background:linear-gradient(180deg,var(--panel2),var(--panel));border:1px solid var(--line);border-radius:var(--radius-lg);padding:14px 16px;min-width:0;box-shadow:0 10px 28px color-mix(in srgb,var(--shadow) 40%,transparent);}.panel>h3{margin:0 0 12px;display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:600;color:var(--text-2);}.panel>h3 .r{margin-left:auto;font-weight:400;font-size:11.5px;color:var(--text-muted);}.sect-h{margin:14px 0 8px;font-size:var(--font-size-md);color:var(--text-2);font-weight:600;}.sect-h .meta{margin-left:8px;font-weight:400;}.blank{display:flex;flex-direction:column;align-items:center;gap:8px;padding:60px 16px;color:var(--text-muted);text-align:center;}.blank .ic{font-size:30px;opacity:0.55;}.blank b{color:var(--text-2);font-weight:600;}.blank a.lnk{text-decoration:underline;}.blank.small{padding:24px;}.fl{padding:7px 10px;border-radius:var(--radius-md);cursor:pointer;display:grid;grid-template-columns:auto 1fr auto;gap:2px 10px;align-items:baseline;}button.fl{width:100%;background:none;border:0;color:inherit;text-align:start;}.fl-name{background:none;border:0;padding:0;color:inherit;font-weight:700;text-align:start;cursor:pointer;min-width:0;}.fl>.meta:last-child{grid-column:1 / 4;overflow:hidden;text-overflow:ellipsis;}.fl:hover{background:var(--raise);}`,zr=O` .enter{animation:enter 0.5s var(--ease) both;}@keyframes turn{to{transform:rotate(360deg);}}@keyframes breathe{0%,100%{opacity:0.45;box-shadow:0 0 0 0 transparent;transform:scale(0.85);}50%{opacity:1;box-shadow:0 0 0 4px var(--status-running-bg);transform:scale(1);}}@keyframes ping{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--status-running) 55%,transparent);}80%,100%{box-shadow:0 0 0 9px transparent;}}@keyframes enter{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}@keyframes bump{0%{transform:scale(1);}35%{transform:scale(1.04);box-shadow:0 0 0 1px var(--line2);}100%{transform:scale(1);}}@keyframes scan{from{transform:translateX(-100%);}to{transform:translateX(100%);}}@keyframes growx{from{transform:scaleX(0);}to{transform:scaleX(1);}}@keyframes stripes{to{background-position:17px 0;}}@keyframes toast-in{from{opacity:0;transform:translateY(12px) scale(0.97);}to{opacity:1;transform:none;}}@keyframes toast-out{to{opacity:0;transform:translateX(24px);}}@keyframes rowin{from{background:color-mix(in srgb,var(--text) 10%,transparent);}to{background:transparent;}}@keyframes bounce{0%,80%,100%{transform:translateY(0);opacity:0.45;}40%{transform:translateY(-5px);opacity:1;}}@keyframes core-beat{0%,100%{transform:scale(1);}50%{transform:scale(0.72);}}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none !important;transition:none !important;}}`,Br=O` *,*::before,*::after{box-sizing:border-box;}*{scrollbar-width:thin;scrollbar-color:var(--line2) transparent;}*:hover{scrollbar-color:var(--text-muted) transparent;}::selection{background:var(--selection);}:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:2px;}button{font:inherit;color:inherit;}[hidden]{display:none !important;}`,Vr=O` [data-tone='failed']{--tone:var(--status-failed);--tone-bg:var(--status-failed-bg);}[data-tone='attention']{--tone:var(--status-attention);--tone-bg:var(--status-attention-bg);}[data-tone='done']{--tone:var(--status-done);--tone-bg:var(--status-done-bg);}[data-tone='running']{--tone:var(--status-running);--tone-bg:var(--status-running-bg);}[data-tone='muted']{--tone:var(--status-muted);--tone-bg:var(--status-muted-bg);}[data-mark]::before{margin-right:0.35em;font-weight:700;}[data-mark='done']::before{content:'✓';content:'✓' / '';color:var(--status-done);}[data-mark='failed']::before{content:'✕';content:'✕' / '';}[data-mark='pending']::before{content:'◌';content:'◌' / '';}.tone-text[data-tone]{color:var(--tone);}.pill{border-radius:var(--radius-pill);padding:1px 10px;font-size:var(--font-size-sm);font-weight:500;background:var(--raise);color:var(--text-2);white-space:nowrap;}.pill[data-tone]{background:var(--tone-bg);color:var(--tone);}.pill[data-tone='done']{background:none;padding-left:2px;color:var(--text-2);}.jstop{font-weight:600;}.jstop[data-tone='failed'],.jstop[data-tone='attention']{color:var(--tone);}.jstop[data-tone='done']{color:var(--text-2);font-weight:500;}.dot{width:8px;height:8px;border-radius:50%;background:var(--line2);flex:none;display:inline-block;}.dot[data-tone]{background:var(--tone);}.dot[data-tone='running']{animation:breathe 1.8s ease-in-out infinite;}.dot[data-tone='attention']{border-radius:1px;transform:rotate(45deg) scale(0.86);}.dot[data-tone='failed']{border-radius:1.5px;}.spin{width:14px;height:14px;border-radius:50%;border:2px solid var(--status-running-bg);border-top-color:var(--status-running);animation:turn 0.9s linear infinite;flex:none;display:inline-block;}`,Hr=O` .jmono,code,.mono{font-family:var(--mono);}.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}.jmono{font-size:11.5px;}.meta{color:var(--text-muted);font-size:var(--font-size-sm);}.words{word-break:keep-all;overflow-wrap:break-word;line-break:strict;}.words .f{display:inline-block;max-width:100%;}@supports (word-break:auto-phrase){.words:lang(ja){word-break:auto-phrase;}}.mut,.jdim{color:var(--text-muted);}a.lnk{color:var(--accent);cursor:pointer;text-decoration:none;}a.lnk:hover{text-decoration:underline;}`,Ur=yr[vr].tokens,Wr=O` :host{${pt(mr.map(e=>e.derive?`--${e.name}: var(${e.prop}, ${e.derive});`:`--${e.name}: var(${e.prop}, ${Ur[e.name]});`).join(`
|
|
7
|
+
`))} --sans:var(--ca-sans,system-ui,-apple-system,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif);--mono:var(--ca-mono,ui-monospace,SFMono-Regular,Menlo,Consolas,'Liberation Mono',monospace);--ease:cubic-bezier(0.2,0.8,0.2,1);color-scheme:var(--ca-color-scheme,${pt(yr[vr].scheme)});color:var(--text);}:host([hidden]){display:none !important;}`,Gr=O` .jtree{font-family:var(--mono);font-size:var(--font-size-md);overflow:auto;}.jt{margin-left:16px;}details.jt>summary{cursor:pointer;list-style:revert;}.jk{color:var(--code-name);}.js{color:var(--code-string);}.jn{color:var(--code-number);}.md-p{margin:0.15em 0;}.md-gap{height:0.5em;}.md-h{font-weight:600;margin:0.7em 0 0.25em;}.md-h1{font-size:1.25em;}.md-h2{font-size:1.12em;}.md-h3{font-size:1.03em;color:var(--text-2);}.md-h4{color:var(--text-2);}.md-li{padding-left:16px;text-indent:-12px;margin:0.1em 0;}.md-li::before{content:'• ';color:var(--text-muted);}.md-ol::before{content:'';}.md-n{color:var(--text-muted);margin-right:6px;}.md-q{border-left:3px solid var(--line2);padding-left:10px;color:var(--text-2);margin:0.2em 0;}.md-hr{border:0;border-top:1px solid var(--line);margin:0.7em 0;}.md-t{border-collapse:collapse;margin:0.4em 0;}.md-t th,.md-t td{border:1px solid var(--line);padding:3px 9px;text-align:left;font-size:12.5px;}.md-t th{background:var(--raise);}.md-doc{padding:10px 14px;background:var(--well);border:1px solid var(--line);border-radius:var(--radius-md);max-height:460px;overflow:auto;line-height:1.55;}.md-doc code,.tx code{background:var(--raise);border-radius:var(--radius-sm);padding:0 4px;font-size:0.92em;}.md-doc pre{background:var(--well);border:1px solid var(--line);border-radius:6px;padding:8px 10px;white-space:pre-wrap;}.md-doc pre code,.tx pre code{background:none;padding:0;border-radius:0;font-size:inherit;}.md-front{margin-bottom:10px;border-collapse:collapse;}.md-front td{padding:2px 14px 2px 0;font-size:12.5px;border:0;vertical-align:top;}.md-front td:first-child{color:var(--text-muted);}.md-tele{color:var(--text-muted);font-size:11.5px;margin-bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.df-text{background:var(--well);border:1px solid var(--line);border-radius:var(--radius-md);padding:10px 12px;font-size:var(--font-size-md);white-space:pre-wrap;max-height:420px;overflow:auto;margin:0;}.df-tog{margin-left:auto;font-size:var(--font-size-sm);color:var(--accent);border:1px solid var(--line2);border-radius:var(--radius-pill);padding:0 9px;cursor:pointer;background:none;}.df-tog:hover{background:var(--accent-bg);}.pv{color:var(--code-constant);background:color-mix(in srgb,var(--code-constant) 12%,transparent);border-radius:var(--radius-sm);padding:0 3px;}.pv.pc{color:var(--code-keyword);background:color-mix(in srgb,var(--code-keyword) 12%,transparent);}.hl{font-family:var(--mono);}.hl-k{color:var(--code-keyword);}.hl-const{color:var(--code-constant);font-style:italic;}.hl-s{color:var(--code-string);}.hl-doc{color:var(--code-string);font-style:italic;opacity:0.85;}.hl-c{color:var(--code-comment);font-style:italic;}.hl-n{color:var(--code-number);}.hl-d{color:var(--code-function);}.hl-f{color:var(--code-function);font-weight:600;}.hl-cls{color:var(--code-type);font-weight:700;}.hl-t{color:var(--code-type);}.hl-b{color:var(--code-name);}.hl-key{color:var(--code-name);}`,Kr=O` .jdur{position:relative;display:block;height:6px;border-radius:3px;background:var(--track);overflow:hidden;margin-top:2px;}.jdur i{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:var(--meter);}.jdur i.bad{background:var(--status-failed);}`,qr=O` .drv-facts{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:8px;font-size:var(--font-size-md);}.drv-facts i{font-style:normal;color:var(--text-muted);margin-right:5px;font-size:var(--font-size-sm);}`,Jr=O` .mark{width:var(--m);height:var(--m);padding:0;margin:0;border:0;border-radius:50%;background:var(--tone,var(--status-done));opacity:0.9;cursor:pointer;position:relative;transition:opacity 0.2s,transform 0.15s,background 0.3s;}.mark:not([data-tone]){--tone:initial;}.mark[data-tone='muted']{opacity:0.55;}.mark[data-tone='running']{opacity:1;animation:breathe 1.4s ease-in-out infinite;}.mark[data-shape='ring']{background:transparent;box-shadow:inset 0 0 0 1.5px var(--tone,var(--line2));}.mark[data-shape='hatched']{border-radius:2px;background:repeating-linear-gradient(135deg,transparent 0 2px,color-mix(in srgb,var(--tone) 55%,transparent) 2px 3px);box-shadow:inset 0 0 0 1.5px var(--tone);opacity:1;}.mark[data-shape='half']{background:linear-gradient(0deg,var(--tone) 50%,transparent 50%);box-shadow:inset 0 0 0 1.5px var(--tone);opacity:1;}.mark[data-shape='square']{border-radius:2px;opacity:1;}.big .mark[data-tone='failed']::after{content:'✕';position:absolute;inset:0;display:grid;place-items:center;color:var(--bg);font-size:calc(var(--m) - 3px);line-height:1;font-weight:700;}.mark[data-n]::after{content:'';position:absolute;inset:32%;border-radius:50%;background:var(--card);}.big .mark[data-n]::after{content:attr(data-n);inset:0;display:grid;place-items:center;border-radius:0;background:none;font:700 max(7px,calc(var(--m) - 4px)) / 1 var(--sans);color:var(--bg);letter-spacing:-0.5px;}.big .mark:is(:not([data-tone]),[data-tone='attention'],[data-tone='muted'])[data-n]::after{color:var(--text);}.mark:hover,.mark:focus-visible{transform:scale(1.4);outline:var(--focus-width) solid var(--text);outline-offset:1px;z-index:2;}.mark.sel{outline:var(--focus-width) solid var(--accent);outline-offset:2px;z-index:2;}@media (prefers-reduced-motion:reduce){.mark{transition:none;}.mark[data-tone='running']{animation:none;background:linear-gradient(90deg,var(--status-running) 50%,transparent 50%);box-shadow:inset 0 0 0 1.5px var(--status-running);}}`,V=[Wr,Br,Hr,Vr,Lr,Rr,zr];function Yr(e){switch(e){case`done`:return`done`;case`failed`:return`failed`;case`attention`:return`pending`;default:return null}}var Xr=e=>(e.mark===void 0||!0===e.mark?Yr(e.tone??`neutral`):e.mark||null)??j;function Zr(e){let t=e.tone??`neutral`;return k`<span class="pill ${e.cls??``}" part="pill tone-${t}" data-tone=${I(t)} data-mark=${Xr(e)} title=${e.title||j}>${e.text}</span>`}function Qr(e){let t=e.tone??`neutral`;return k`<span class="jstop ${e.cls??``}" part="status tone-${t}" data-tone=${I(t)} data-mark=${Xr(e)} title=${e.title||j}>${e.text}</span>`}function $r(e,t){let n=t.tone??`neutral`;return k`<span class="${e} ${t.cls??``}" data-tone=${I(n)} data-mark=${Xr(t)} title=${t.title||j}>${t.text}</span>`}var ei=e=>(...t)=>({_$litDirective$:e,values:t}),ti=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,n){this._$Ct=e,this._$AM=t,this._$Ci=n}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}},ni=`important`,ri=` !`+ni,ii=ei(class extends ti{constructor(e){if(super(e),e.type!==1||e.name!==`style`||e.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce((t,n)=>{let r=e[n];return r==null?t:t+`${n=n.includes(`-`)?n:n.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,`-$&`).toLowerCase()}:${r};`},``)}update(e,[t]){let{style:n}=e.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(t)),this.render(t);for(let e of this.ft)t[e]??(this.ft.delete(e),e.includes(`-`)?n.removeProperty(e):n[e]=null);for(let e in t){let r=t[e];if(r!=null){this.ft.add(e);let t=typeof r==`string`&&r.endsWith(ri);e.includes(`-`)||t?n.setProperty(e,t?r.slice(0,-11):r,t?ni:``):n[e]=r}}return $t}});function ai(e,t={}){return k`<div class="legend ${t.cls??``}" part="legend" role="list" aria-label=${t.label||j}>
|
|
8
|
+
${e.map(e=>k`<span role="listitem" aria-hidden=${e.decorative?`true`:j}>${(e=>e.icon??(e.swatch||e.tone||e.shape||e.cls?k`<i class=${e.cls||j} data-tone=${I(e.tone)} data-shape=${e.shape??j} style=${e.swatch?ii({background:e.swatch}):j}></i>`:j))(e)}${e.label}</span>`)}
|
|
9
|
+
</div>`}var oi=O` .legend{display:flex;gap:14px;flex-wrap:wrap;font-size:var(--font-size-sm);color:var(--text-muted);}.legend>span{white-space:nowrap;}.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px;}.legend i[data-tone]{background:var(--tone);}.legend i[data-shape='round']{border-radius:50%;}.legend i[data-shape='square']{border-radius:2px;}.legend i[data-shape='ring']{background:none;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--tone,var(--line2));}.legend i[data-shape='half']{border-radius:50%;background:linear-gradient(0deg,var(--tone,var(--line2)) 50%,transparent 50%);box-shadow:inset 0 0 0 1.5px var(--tone,var(--line2));}.legend i[data-shape='hatched']{border-radius:2px;background:repeating-linear-gradient(135deg,transparent 0 2px,var(--tone,var(--line2)) 2px 3px);}`;function si(e){let t=e.reduce((e,t)=>e+Math.max(t,0),0);if(!t)return e.map(()=>0);let n=e.map(e=>100*Math.max(e,0)/t),r=n.map(Math.floor),i=n.map((e,t)=>[e-Math.floor(e),t]).sort((e,t)=>t[0]-e[0]||e[1]-t[1]);for(let e=0,t=100-r.reduce((e,t)=>e+t,0);e<t;e++)r[i[e][1]]+=1;return r}var ci=(e,t)=>e===0&&t>0?`<1%`:`${e}%`,li=O` .share{display:grid;gap:6px;}.share-bar,.share-names{display:flex;gap:2px;min-width:0;}.share-bar{height:14px;}.share-seg{position:relative;flex:0 1 0;min-width:3px;height:100%;border-radius:1px;cursor:default;outline-offset:2px;}.share-seg[data-edge='start']{border-radius:4px 1px 1px 4px;}.share-seg[data-edge='end']{border-radius:1px 4px 4px 1px;}.share-seg:only-child{border-radius:4px;}.share-seg::before{content:'';position:absolute;inset:-6px 0;}.share-seg:hover,.share-seg:focus-visible{box-shadow:0 0 0 2px var(--card);}.share-tip{display:none;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);z-index:2;padding:4px 8px;border-radius:var(--radius-sm);background:var(--raise);border:1px solid var(--line2);box-shadow:0 4px 14px var(--shadow);color:var(--text);font-size:var(--font-size-sm);white-space:nowrap;pointer-events:none;}.share-seg[data-edge='start'] .share-tip,.share-seg:only-child .share-tip{left:0;transform:none;}.share-seg[data-edge='end'] .share-tip{left:auto;right:0;transform:none;}.share-seg:hover .share-tip,.share-seg:focus-visible .share-tip{display:block;}.share-names span{flex:0 1 0;min-width:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-sm);color:var(--text-muted);font-variant-numeric:tabular-nums;}.share-names b{font-weight:600;color:var(--text-2);}`,ui=(e,t,n)=>e[t]?.count?.(n)??`${n} ${e[t]?.label??t}`;function di(e,t=` | `){let n=e.filter(e=>typeof e==`string`?e:e.text);return n.length?k`${n.map((e,n)=>typeof e==`string`?k`${n?t:``}<span class="f">${e}</span>`:k`${n?t:``}<span class="f tone-text" data-tone=${I(e.tone)}>${e.text}</span>`)}`:j}var fi=new Map;function pi(e,t,n={}){let r=fi.get(e)??e;return t?k`<span class=${n.cls||j} part="icon" title=${t}><span aria-hidden="true">${r}</span><span class="sr">${t}</span></span>`:k`<span class=${n.cls||j} part="icon" aria-hidden="true">${r}</span>`}var mi=class{constructor(e,t){this.host=e,this.o=t,this.current=0,this.onFocus=e=>{let t=this.indexOf(e);t>=0&&t!==this.current&&this.set(t)},this.onKey=e=>{let t=this.o.items(),n=this.indexOf(e);if(n<0)return;let r=function(e,t,n,r){if(e<=0)return null;let i=n=>n===t||n<0||n>=e?null:n;if(r.layout===`grid`){let a=Math.max(1,r.cols??1),o=Math.floor(t/a)*a;switch(n){case`ArrowRight`:return(t+1)%a&&t+1<e?i(t+1):null;case`ArrowLeft`:return t%a?i(t-1):null;case`ArrowDown`:return i(t+a);case`ArrowUp`:return i(t-a);case`Home`:return i(r.ctrl?0:o);case`End`:return i(r.ctrl?e-1:Math.min(o+a,e)-1);default:return null}}let[a,o]=r.layout===`horizontal`?[`ArrowLeft`,`ArrowRight`]:[`ArrowUp`,`ArrowDown`],s=n=>i(r.wrap?(t+n+e)%e:t+n);switch(n){case o:return s(1);case a:return s(-1);case`Home`:return i(0);case`End`:return i(e-1);default:return null}}(t.length,n,e.key,{layout:this.o.layout,cols:this.o.columns?.(),wrap:this.o.wrap,ctrl:e.ctrlKey||e.metaKey}),i=r===null?void 0:t[r];r!==null&&i&&(e.preventDefault(),this.set(r),i.focus(),this.o.onMove?.(i,r))},e.addController(this)}hostConnected(){this.host.addEventListener(`keydown`,this.onKey),this.host.addEventListener(`focusin`,this.onFocus)}hostDisconnected(){this.host.removeEventListener(`keydown`,this.onKey),this.host.removeEventListener(`focusin`,this.onFocus)}hostUpdated(){this.sync()}set(e){this.current=e,this.sync()}sync(){let e=this.o.items();e.length&&(this.current=Math.min(Math.max(0,this.current),e.length-1),e.forEach((e,t)=>e.tabIndex=t===this.current?0:-1))}indexOf(e){return this.o.items().findIndex(t=>e.composedPath().includes(t))}};function hi(e,t,n,r=8){let i=Math.max(0,e.length-1),a=e[i]??0;if(!i||a<=0)return{from:0,to:i,padTop:0,padBottom:0};let o=Math.max(0,t),s=gi(e,o),c=gi(e,o+Math.max(0,n)),l=Math.max(0,s-r),u=Math.min(i,Math.max(l,c+1+r));return{from:l,to:u,padTop:e[l],padBottom:a-e[u]}}function gi(e,t){let n=0,r=e.length-1-1;for(;n<r;){let i=n+r+1>>1;e[i]<=t?n=i:r=i-1}return n}var{I:_i}=mn,vi=e=>e,yi=()=>document.createComment(``),bi=(e,t,n)=>{let r=e._$AA.parentNode,i=t===void 0?e._$AB:t._$AA;if(n===void 0)n=new _i(r.insertBefore(yi(),i),r.insertBefore(yi(),i),e,e.options);else{let t=n._$AB.nextSibling,a=n._$AM,o=a!==e;if(o){let t;n._$AQ?.(e),n._$AM=e,n._$AP!==void 0&&(t=e._$AU)!==a._$AU&&n._$AP(t)}if(t!==i||o){let e=n._$AA;for(;e!==t;){let t=vi(e).nextSibling;vi(r).insertBefore(e,i),e=t}}}return n},xi=(e,t,n=e)=>(e._$AI(t,n),e),Si={},Ci=(e,t=Si)=>e._$AH=t,wi=e=>{e._$AR(),e._$AA.remove()},Ti=(e,t,n)=>{let r=new Map;for(let i=t;i<=n;i++)r.set(e[i],i);return r},H=ei(class extends ti{constructor(e){if(super(e),e.type!==2)throw Error(`repeat() can only be used in text expressions`)}dt(e,t,n){let r;n===void 0?n=t:t!==void 0&&(r=t);let i=[],a=[],o=0;for(let t of e)i[o]=r?r(t,o):o,a[o]=n(t,o),o++;return{values:a,keys:i}}render(e,t,n){return this.dt(e,t,n).values}update(e,[t,n,r]){let i=(e=>e._$AH)(e),{values:a,keys:o}=this.dt(t,n,r);if(!Array.isArray(i))return this.ut=o,a;let s=this.ut??=[],c=[],l,u,d=0,f=i.length-1,p=0,m=a.length-1;for(;d<=f&&p<=m;)if(i[d]===null)d++;else if(i[f]===null)f--;else if(s[d]===o[p])c[p]=xi(i[d],a[p]),d++,p++;else if(s[f]===o[m])c[m]=xi(i[f],a[m]),f--,m--;else if(s[d]===o[m])c[m]=xi(i[d],a[m]),bi(e,c[m+1],i[d]),d++,m--;else if(s[f]===o[p])c[p]=xi(i[f],a[p]),bi(e,i[d],i[f]),f--,p++;else if(l===void 0&&(l=Ti(o,p,m),u=Ti(s,d,f)),l.has(s[d])){if(l.has(s[f])){let t=u.get(o[p]),n=t===void 0?null:i[t];if(n===null){let t=bi(e,i[d]);xi(t,a[p]),c[p]=t}else c[p]=xi(n,a[p]),bi(e,i[d],n),i[t]=null;p++}else wi(i[f]),f--}else wi(i[d]),d++;for(;p<=m;){let t=bi(e,c[m+1]);xi(t,a[p]),c[p++]=t}for(;d<=f;){let e=i[d++];e!==null&&wi(e)}return this.ut=o,Ci(e,c),$t}});function U(e,t,n,r){var i,a=arguments.length,o=a<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(o=(a<3?i(o):a>3?i(t,n,o):i(t,n))||o);return a>3&&o&&Object.defineProperty(t,n,o),o}var Ei=class extends M{constructor(...e){super(...e),this.options=[],this.value=``,this.label=``,this.roving=new mi(this,{items:()=>[...this.renderRoot.querySelectorAll(`button:not(:disabled)`)??[]],layout:`horizontal`,wrap:!0,onMove:e=>this.choose(e.dataset.value??``)})}static{this.styles=[V,O` :host{display:inline-flex;vertical-align:middle;}.group{display:inline-flex;border:1px solid var(--line);border-radius:var(--cae-segmented-radius,6px);overflow:hidden;}button{min-width:22px;height:var(--cae-segmented-height,20px);line-height:var(--cae-segmented-height,20px);padding:var(--cae-segmented-padding,0 10px);margin:0;border:0;border-radius:0;background:none;font-size:var(--cae-segmented-font-size,11.5px);text-align:center;color:var(--text-muted);cursor:pointer;}button + button{border-left:var(--cae-segmented-divider,1px solid var(--line));}button:hover{color:var(--cae-segmented-hover,var(--text));}button[aria-checked='true']{background:var(--raise);color:var(--text);cursor:default;}button:disabled{opacity:0.5;cursor:default;}button:focus-visible{outline-offset:-2px;}`]}willUpdate(){let e=this.options.filter(e=>!e.disabled).findIndex(e=>e.value===this.value);e>=0&&(this.roving.current=e)}choose(e){e!==this.value&&(this.value=e,L(this,`cae-change`,{value:e}))}render(){return k`<div class="group" part="group" role="radiogroup" aria-label=${this.label||j}>
|
|
10
|
+
${H(this.options,e=>e.value,e=>{let t=e.value===this.value;return k`<button type="button" role="radio" part=${t?`option option-selected`:`option`} aria-checked=${t?`true`:`false`} data-value=${e.value} lang=${e.lang||j} title=${e.title||j} ?disabled=${!!e.disabled} @click=${()=>this.choose(e.value)}>${e.label}</button>`})}
|
|
11
|
+
</div>`}};U([P({attribute:!1})],Ei.prototype,`options`,void 0),U([P()],Ei.prototype,`value`,void 0),U([P()],Ei.prototype,`label`,void 0);var Di=class extends M{constructor(...e){super(...e),this.open=1}static{this.styles=[V,Gr]}render(){return k`<div class="jtree" part="tree" data-scroll="x">${this.node(this.value,0)}</div>`}node(e,t){if(typeof e!=`object`||!e)return k`<span class=${typeof e==`string`?`js`:`jn`}>${JSON.stringify(e)??`undefined`}</span>`;let n=Array.isArray(e)?e.map((e,t)=>[t,e]):Object.entries(e);return n.length?k`${n.map(([e,n])=>(e=>typeof e!=`object`||!e||(Array.isArray(e)?!e.length:!Object.keys(e).length))(n)?k`<div class="jt"><span class="jk">${e}</span>: ${this.node(n,t+1)}</div>`:k`<details class="jt" ?open=${t<this.open}>
|
|
12
|
+
<summary>
|
|
13
|
+
<span class="jk">${e}</span>
|
|
14
|
+
<span class="meta">${Array.isArray(n)?`[${n.length}]`:`{${Object.keys(n).length}}`}</span>
|
|
15
|
+
</summary>
|
|
16
|
+
${this.node(n,t+1)}
|
|
17
|
+
</details>`)}`:Array.isArray(e)?`[]`:`{}`}};U([P({attribute:!1})],Di.prototype,`value`,void 0),U([P({type:Number})],Di.prototype,`open`,void 0);var Oi=new Set(`and as assert async await break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield`.split(` `)),ki=new Set([`None`,`True`,`False`,`self`,`cls`]),Ai=new Set(`str int float bool list dict set tuple bytes object type len range print isinstance super Optional Literal Any Union Path`.split(` `)),ji=new RegExp([`(#[^\\n]*)`,`((?:[rRbBfFuU]{0,2})(?:"""[\\s\\S]*?"""|'''[\\s\\S]*?'''))`,`((?:[rRbBfFuU]{0,2})(?:"(?:[^"\\\\\\n]|\\\\.)*"|'(?:[^'\\\\\\n]|\\\\.)*'))`,`(@[A-Za-z_][\\w.]*)`,`(\\b\\d[\\d_]*(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b)`,`([A-Za-z_]\\w*)`].join(`|`),`g`),Mi={py:`python`,python:`python`,json:`json`,jsonc:`json`};function Ni(e,t){let n=function(e){let t=String(e||``).toLowerCase();return Mi[t.replace(/^.*\./,``)]||Mi[t]||``}(t);return n===`python`?function(e){let t=``,n=0,r=``;ji.lastIndex=0;for(let i=ji.exec(e);i;i=ji.exec(e)){t+=B(e.slice(n,i.index)),n=ji.lastIndex;let[a,o,s,c,l,u,d]=i;if(o)t+=`<span class="hl-c">${B(a)}</span>`;else if(s)t+=`<span class="hl-s hl-doc">${B(a)}</span>`;else if(c)t+=`<span class="hl-s">${B(a)}</span>`;else if(l)t+=`<span class="hl-d">${B(a)}</span>`;else if(u)t+=`<span class="hl-n">${B(a)}</span>`;else if(d){let e=Oi.has(d)?`hl-k`:ki.has(d)?`hl-k hl-const`:r===`class`?`hl-cls`:r===`def`?`hl-f`:Ai.has(d)?`hl-b`:/^[A-Z]\w*$/.test(d)&&d.length>1&&/[a-z]/.test(d)?`hl-t`:``;t+=e?`<span class="${e}">${B(d)}</span>`:B(d),r=d;continue}/^\s*$/.test(a)||(r=``)}return t+B(e.slice(n))}(e):n===`json`?function(e){let t=/("(?:[^"\\\n]|\\.)*")(\s*:)?|\b(true|false|null)\b|(-?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b)/g,n=``,r=0;for(let i=t.exec(e);i;i=t.exec(e)){n+=B(e.slice(r,i.index)),r=t.lastIndex;let[,a,o,s,c]=i;n+=a?o?`<span class="hl-key">${B(a)}</span>${B(o)}`:`<span class="hl-s">${B(a)}</span>`:s?`<span class="hl-k hl-const">${s}</span>`:`<span class="hl-n">${c??``}</span>`}return n+B(e.slice(r))}(e):B(e)}function Pi(e){return e.replace(/`([^`\n]+)`/g,`<code>$1</code>`).replace(/\*\*([^*\n]+)\*\*/g,`<b>$1</b>`).replace(/(^|[^*\w])\*([^*\n]+)\*(?!\w)/g,`$1<i>$2</i>`).replace(/\[([^\]\n]+)\]\((https?:\/\/[^)\s]+)\)/g,`<a class="lnk" href="$2" target="_blank" rel="noopener">$1</a>`)}var Fi=/^\s*\|.*\|\s*$/;function Ii(e){return function(e){let t=[],n=0;for(;;){let r=e.indexOf("```",n);if(r<0)return t.push({t:`text`,s:e.slice(n)}),t;t.push({t:`text`,s:e.slice(n,r)});let i=e.indexOf(`
|
|
18
|
+
`,r+3),a=e.slice(r+3,i<0?e.length:i).trim(),o=i<0?e.length:i+1,s=e.indexOf("```",o);if(s<0)return t.push({t:`code`,s:e.slice(o),lang:a}),t;t.push({t:`code`,s:e.slice(o,s),lang:a}),n=s+3}}(String(e||``)).map(e=>{if(e.t===`code`)return`<pre><code class="hl">${Ni(e.s,e.lang)}</code></pre>`;let t=B(e.s).split(`
|
|
19
|
+
`),n=[];for(let e=0;e<t.length;e++){let r=t[e]??``,i;if(i=r.match(/^(#{1,6})\s+(.*)$/))n.push(`<div class="md-h md-h${Math.min(i[1].length,4)}">${Pi(i[2])}</div>`);else if(/^\s*(-{3,}|\*{3,})\s*$/.test(r))n.push(`<hr class="md-hr">`);else if(i=r.match(/^\s*>\s?(.*)$/))n.push(`<div class="md-q">${Pi(i[1])}</div>`);else if(i=r.match(/^\s*[-*]\s+(.*)$/))n.push(`<div class="md-li">${Pi(i[1])}</div>`);else if(i=r.match(/^\s*(\d+)[.)]\s+(.*)$/))n.push(`<div class="md-li md-ol"><span class="md-n">${i[1]}.</span>${Pi(i[2])}</div>`);else if(Fi.test(r)&&/^\s*\|[\s:|-]+\|\s*$/.test(t[e+1]??``)){let i=e=>e.trim().replace(/^\||\|$/g,``).split(`|`).map(e=>Pi(e.trim())),a=i(r);e+=2;let o=[];for(;e<t.length&&Fi.test(t[e]??``);)o.push(i(t[e++]??``));e--,n.push(`<table class="md-t"><tr>${a.map(e=>`<th>${e}</th>`).join(``)}</tr>`+o.map(e=>`<tr>${e.map(e=>`<td>${e}</td>`).join(``)}</tr>`).join(``)+`</table>`)}else n.push(r.trim()===``?`<div class="md-gap"></div>`:`<div class="md-p">${Pi(r)}</div>`)}return n.join(``)}).join(``)}function Li(e,t){let n=String(e||``),r=n.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/),i=``,a=n;if(r){a=r[2]??``;let e=(r[1]??``).split(`
|
|
20
|
+
`).map(e=>e.match(/^([\w-]+):\s*(.*)$/)).filter(e=>!!e).map(([,e,t])=>`<tr><td class="jmono">${B(e)}</td><td>${B(t)}</td></tr>`).join(``);i=e?`<table class="md-front">${e}</table>`:``}let o=Ii(a);return`<div class="md-doc">${i}${t?t(o):o}</div>`}var Ri=class extends ti{constructor(e){if(super(e),this.it=j,e.type!==2)throw Error(this.constructor.directiveName+`() can only be used in child bindings`)}render(e){if(e===j||e==null)return this._t=void 0,this.it=e;if(e===$t)return e;if(typeof e!=`string`)throw Error(this.constructor.directiveName+`() called with a non-string value`);if(e===this.it)return this._t;this.it=e;let t=[e];return t.raw=t,this._t={_$litType$:this.constructor.resultType,strings:t,values:[]}}};Ri.directiveName=`unsafeHTML`,Ri.resultType=1;var zi=ei(Ri),Bi={showRendered:`Show rendered`,showSource:`Show source`},Vi=class extends M{constructor(...e){super(...e),this.text=``,this.strings={},this.source=!1}static{this.styles=[V,Gr,O` :host{display:block;}.md-p,.md-h,.md-li,.md-q{overflow-wrap:anywhere;}.bar{display:flex;justify-content:flex-end;margin-bottom:4px;}`]}render(){let e=jr(Bi,this.strings),{head:t,body:n}=this.split?.(this.text)??{head:``,body:this.text},r=Li(n,this.transform);return k`<div class="bar">
|
|
21
|
+
<button type="button" class="df-tog" part="toggle" @click=${()=>this.source=!this.source}>
|
|
22
|
+
${this.source?e.showRendered:e.showSource}</button>
|
|
23
|
+
</div>
|
|
24
|
+
${this.source?k`<pre class="df-text">${this.text}</pre>`:k`${t?k`<div class="md-tele jmono">${t}</div>`:j}${zi(r)}`}`}};U([P()],Vi.prototype,`text`,void 0),U([P({attribute:!1})],Vi.prototype,`split`,void 0),U([P({attribute:!1})],Vi.prototype,`transform`,void 0),U([P({attribute:!1})],Vi.prototype,`strings`,void 0),U([F()],Vi.prototype,`source`,void 0);var Hi=class extends M{constructor(...e){super(...e),this.value=0,this.shown=0,this.frame=0}createRenderRoot(){return this}willUpdate(e){if(!e.has(`value`))return;let t=this.shown,n=this.value;if(cancelAnimationFrame(this.frame),globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches||t===n||!Number.isFinite(n)||!this.isConnected)return void(this.shown=n);let r=performance.now(),i=e=>{let a=Math.min(1,(e-r)/700);this.shown=Math.round(t+(n-t)*(1-(1-a)**3)),a<1&&(this.frame=requestAnimationFrame(i))};this.frame=requestAnimationFrame(i)}disconnectedCallback(){super.disconnectedCallback(),cancelAnimationFrame(this.frame),this.shown=this.value}render(){return String(this.shown)}};U([P({type:Number})],Hi.prototype,`value`,void 0),U([F()],Hi.prototype,`shown`,void 0);var Ui=class extends M{constructor(){super(),this.since=0,new Fr(this)}createRenderRoot(){return this}render(){return this.since?z((Date.now()-this.since)/1e3):``}};U([P({type:Number})],Ui.prototype,`since`,void 0);var Wi={empty:`No rows`,sortAscending:`Sort ascending`,sortDescending:`Sort descending`},Gi=O` :host{display:block;container-type:inline-size;}table{display:block;width:100%;border-collapse:collapse;overflow-x:auto;}caption{display:block;text-align:start;}thead,tbody{display:block;}tr{display:grid;grid-template-columns:var(--cae-data-table-columns);column-gap:var(--cae-data-table-gap,12px);align-items:center;padding:var(--cae-data-table-row-padding,6px 12px);}th,td{display:block;min-width:0;padding:0;text-align:start;font-weight:inherit;}[data-align='end']{text-align:end;font-variant-numeric:tabular-nums;}thead tr{color:var(--text-muted);font-size:var(--font-size-sm);border-bottom:1px solid var(--line);}tbody tr{border-bottom:1px solid var(--line);}tbody tr[data-key]{cursor:pointer;}table.passive tbody tr[data-key]{cursor:default;}tbody tr[data-key]:hover{background:var(--raise);}tbody tr[data-key]:focus-visible{outline-offset:-2px;}tbody tr[aria-current='true']{background:var(--accent-bg);}tbody tr[data-tone='running']{background:var(--status-running-bg);}tbody tr[data-tone='failed']{background:color-mix(in srgb,var(--status-failed) 6%,transparent);box-shadow:inset 3px 0 0 var(--status-failed);}tr.spacer{display:block;padding:0;border:0;}tr.empty{display:block;border:0;padding:0;}tr.empty td{color:var(--text-muted);padding:8px;}.sort{display:inline-flex;align-items:center;gap:4px;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer;}.sort:hover{color:var(--text);}.arrow{font-size:0.85em;}`,Ki=ei(class extends ti{constructor(e){if(super(e),this.names=[],e.type!==6)throw Error(`attrs() goes on an element`)}render(e){return j}update(e,[t]){let n=e.element,r=Object.keys(t??{});for(let e of this.names)r.includes(e)||n.removeAttribute(e);for(let e of r)n.getAttribute(e)!==t[e]&&n.setAttribute(e,t[e]);return this.names=r,j}}),qi=new Set([`A`,`BUTTON`,`INPUT`,`SELECT`,`TEXTAREA`,`SUMMARY`,`LABEL`]),Ji=class extends M{constructor(...e){super(...e),this.columns=[],this.rows=[],this.rowKey=e=>{let t=e.id;return typeof t==`string`||typeof t==`number`?String(t):``},this.activatable=!0,this.selected=null,this.sort=null,this.windowAt=200,this.rowHeight=32,this.caption=``,this.strings={},this.cellStyles=[],this.range={from:0,to:60},this.heights=new Map,this.offsets=null,this.focusKey=null,this.scroller=null,this.resized=null,this.frame=0,this.held=!1,this.roving=new mi(this,{items:()=>[...this.renderRoot.querySelectorAll(`tbody tr[data-key]`)],layout:`vertical`,onMove:e=>this.focusKey=e.dataset.key??null}),this.onScroll=()=>{this.frame||=requestAnimationFrame(()=>{this.frame=0,this.reframe()})},this.onClick=e=>{let t=this.rowOf(e);t&&this.act(t.id)},this.onFocusIn=e=>{let t=this.rowOf(e);t&&(this.focusKey=t.id)},this.onKey=e=>{let t=e.composedPath()[0];if(t instanceof HTMLElement&&t.tagName===`TR`&&t.dataset.key!==void 0){if(e.key===`Enter`)return e.preventDefault(),void this.act(t.dataset.key);if(this.windowed&&(e.key===`Home`||e.key===`End`)){e.preventDefault(),e.stopPropagation();let t=e.key===`End`,n=this.rows[t?this.rows.length-1:0];if(n===void 0)return;this.focusKey=this.rowKey(n);let r=this.rows.length,i=Math.max(1,this.range.to-this.range.from);this.scrollToEnd(t),this.range=t?{from:Math.max(0,r-i),to:r}:{from:0,to:i},this.held=!0,this.updateComplete.then(()=>this.renderRoot.querySelector(`tbody tr[data-key="${CSS.escape(this.focusKey??``)}"]`)?.focus())}}}}static{this.styles=[V,Gi]}get windowed(){return this.rows.length>this.windowAt}disconnectedCallback(){super.disconnectedCallback(),this.unwatch()}rowStarts(){if(this.offsets)return this.offsets;let e=0;for(let t of this.heights.values())e+=t;let t=this.heights.size?e/this.heights.size:this.rowHeight;return this.offsets=function(e,t){let n=Array(Math.max(0,e)+1);n[0]=0;for(let r=0;r<e;r++)n[r+1]=n[r]+Math.max(0,t(r));return n}(this.rows.length,e=>this.heights.get(this.rowKey(this.rows[e]))??t)}visible(){let e=this.rowStarts(),t=this.renderRoot.querySelector(`tbody`);if(!t||!this.scroller)return hi(e,0,e.at(-1)/Math.max(1,this.rows.length)*60,0);let n=this.scroller instanceof HTMLElement?{top:this.scroller.getBoundingClientRect().top,height:this.scroller.clientHeight}:{top:0,height:this.scroller.innerHeight};return hi(e,n.top-t.getBoundingClientRect().top,n.height)}scrollToEnd(e){let t=this.renderRoot.querySelector(`tbody`),n=this.scroller;if(!t||!n)return;let r=t.getBoundingClientRect(),i=n instanceof HTMLElement?n.getBoundingClientRect():{top:0,bottom:n.innerHeight},a=e?r.bottom-i.bottom:r.top-i.top;n instanceof HTMLElement?n.scrollTop+=a:n.scrollBy(0,a)}reframe(){let e=this.visible();e.from===this.range.from&&e.to===this.range.to||(this.range={from:e.from,to:e.to})}findScroller(){let e=this.parentNode;for(;e;){if(e instanceof HTMLElement){let t=getComputedStyle(e).overflowY;if((t===`auto`||t===`scroll`||t===`overlay`)&&e.scrollHeight>e.clientHeight+1)return e}e=e instanceof ShadowRoot?e.host:e.parentNode}return window}watch(){this.scroller||(this.scroller=this.findScroller(),this.scroller.addEventListener(`scroll`,this.onScroll,{passive:!0}),this.scroller instanceof HTMLElement?typeof ResizeObserver<`u`&&(this.resized??=new ResizeObserver(this.onScroll)).observe(this.scroller):window.addEventListener(`resize`,this.onScroll,{passive:!0}))}unwatch(){cancelAnimationFrame(this.frame),this.frame=0,this.scroller?.removeEventListener(`scroll`,this.onScroll),window.removeEventListener(`resize`,this.onScroll),this.resized?.disconnect(),this.scroller=null}willUpdate(e){if((e.has(`rows`)||e.has(`rowHeight`))&&(this.offsets=null),e.has(`rows`)||e.has(`windowAt`)){if(this.windowed&&this.hasUpdated){let e=this.visible();this.range={from:e.from,to:e.to}}else this.windowed||this.unwatch()}let t=this.shown().map(this.rowKey),n=this.focusKey===null?-1:t.indexOf(this.focusKey);this.roving.current=Math.max(0,n)}updated(e){if(e.has(`cellStyles`)&&this.renderRoot instanceof ShadowRoot&&mt(this.renderRoot,[...this.constructor.elementStyles,...this.cellStyles]),!this.windowed)return;this.watch();let t=!1;for(let e of this.renderRoot.querySelectorAll(`tbody tr[data-key]`)){let n=e.getBoundingClientRect().height,r=e.dataset.key;n>0&&Math.abs(n-(this.heights.get(r)??-1))>.5&&(this.heights.set(r,n),t=!0)}t&&(this.offsets=null),this.held?this.held=!1:this.onScroll()}shown(){return this.windowed?this.rows.slice(this.range.from,Math.min(this.rows.length,this.range.to)):this.rows}rowOf(e){for(let t of e.composedPath())if(t instanceof HTMLElement){if(qi.has(t.tagName))return null;if(t.tagName===`TR`&&t.dataset.key!==void 0)return{tr:t,id:t.dataset.key};if(t===this)break}return null}act(e){this.activatable?L(this,`cae-activate`,{id:e}):(this.selected=e,L(this,`cae-select`,{id:e}))}header(e,t){let n=this.sort?.id===e.id?this.sort.direction:null,r=n===`asc`?`ascending`:n===`desc`?`descending`:j,i=(e=>e.sortable??!!e.compare)(e)?k`<button type="button" class="sort" title=${n===`asc`?t.sortDescending:t.sortAscending} @click=${()=>L(this,`cae-sort`,{id:e.id,direction:n===`asc`?`desc`:`asc`})}>${e.header}${n?k`<span class="arrow" aria-hidden="true">${n===`asc`?`▲`:`▼`}</span>`:j}</button>`:e.header;return k`<th scope="col" role="columnheader" part="header-cell" data-col=${e.id} data-align=${e.align??j} aria-sort=${r} title=${e.tip||j}>${i}</th>`}row(e,t,n){let r=this.rowKey(e),i=this.selected!==null&&this.selected===r;return k`<tr role="row" part=${i?`row row-selected`:`row`} data-key=${r} data-tone=${I(this.rowTone?.(e))} aria-current=${i?`true`:j} aria-rowindex=${this.windowed?t+2:j} ${Ki(this.rowAttrs?.(e))}>
|
|
25
|
+
${this.columns.map(r=>r.id===n?k`<th scope="row" role="rowheader" part="cell" data-col=${r.id} data-align=${r.align??j}>${r.cell(e,t)}</th>`:k`<td role="cell" part="cell" data-col=${r.id} data-align=${r.align??j}>${r.cell(e,t)}</td>`)}
|
|
26
|
+
</tr>`}render(){let e=jr(Wi,this.strings),t=this.rows.length,n=this.columns.map(e=>e.width??`minmax(0, 1fr)`).join(` `),r=this.columns.find(e=>e.rowHeader)?.id,i=this.windowed?this.range.from:0,a=this.shown(),o=this.windowed?this.rowStarts():null,s=o?o[i]:0,c=o?o[t]-o[i+a.length]:0;return k`<table part="table" data-scroll="x" role="table" class=${this.activatable?``:`passive`} style="--cae-data-table-columns: ${n}" aria-rowcount=${this.windowed?t+1:j}>
|
|
27
|
+
<caption part="caption"><slot name="caption">${this.caption}</slot></caption>
|
|
28
|
+
<thead part="head" role="rowgroup"><tr role="row">${this.columns.map(t=>this.header(t,e))}</tr></thead>
|
|
29
|
+
<tbody role="rowgroup" @click=${this.onClick} @keydown=${this.onKey} @focusin=${this.onFocusIn}>
|
|
30
|
+
${s>0?k`<tr class="spacer" aria-hidden="true" style="height: ${s}px"></tr>`:j}
|
|
31
|
+
${H(a,this.rowKey,(e,t)=>this.row(e,i+t,r))}
|
|
32
|
+
${c>0?k`<tr class="spacer" aria-hidden="true" style="height: ${c}px"></tr>`:j}
|
|
33
|
+
${t?j:k`<tr class="empty" role="row"><td part="empty" role="cell" colspan=${this.columns.length||1}><slot name="empty">${e.empty}</slot></td></tr>`}
|
|
34
|
+
</tbody>
|
|
35
|
+
</table>`}};U([P({attribute:!1})],Ji.prototype,`columns`,void 0),U([P({attribute:!1})],Ji.prototype,`rows`,void 0),U([P({attribute:!1})],Ji.prototype,`rowKey`,void 0),U([P({attribute:!1})],Ji.prototype,`rowTone`,void 0),U([P({attribute:!1})],Ji.prototype,`rowAttrs`,void 0),U([P({type:Boolean})],Ji.prototype,`activatable`,void 0),U([P()],Ji.prototype,`selected`,void 0),U([P({attribute:!1})],Ji.prototype,`sort`,void 0),U([P({type:Number})],Ji.prototype,`windowAt`,void 0),U([P({type:Number})],Ji.prototype,`rowHeight`,void 0),U([P()],Ji.prototype,`caption`,void 0),U([P({attribute:!1})],Ji.prototype,`strings`,void 0),U([P({attribute:!1})],Ji.prototype,`cellStyles`,void 0),U([F()],Ji.prototype,`range`,void 0);var Yi=O` :host{display:block;container-type:inline-size;}.tiles{display:grid;grid-template-columns:repeat(var(--cae-stat-tiles-columns,5),minmax(0,1fr));gap:var(--cae-stat-tiles-gap,12px);}@container (max-width:1100px){.tiles{grid-template-columns:repeat(4,minmax(0,1fr));}}@container (max-width:660px){.tiles{grid-template-columns:repeat(2,minmax(0,1fr));}}@container (max-width:420px){.tile{padding:10px 12px;}.value{font-size:22px;}}@container (max-width:240px){.tiles{grid-template-columns:minmax(0,1fr);}}.tile{position:relative;background:color-mix(in srgb,var(--text) 2.5%,transparent);border:1px solid var(--line);border-radius:11px;padding:12px 14px;overflow:hidden;}.tile::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--edge,transparent);}.label{font-size:12px;font-weight:600;color:var(--text-muted);}.value{overflow-wrap:anywhere;font-size:28px;font-weight:700;line-height:1.15;margin-top:6px;font-variant-numeric:tabular-nums;letter-spacing:-0.01em;color:var(--text);}.sub{font-size:11.5px;color:var(--text-muted);margin-top:2px;}.action{font-size:11.5px;margin-top:4px;}.tile[data-tone]{--edge:var(--tone);}.tile[data-tone] .value,.tile[data-tone] .label::before{color:var(--tone);}.label[data-mark]::before{display:inline-block;}`,Xi=class extends M{constructor(...e){super(...e),this.tiles=[],this.columns=5,this.bump=!0,this.prev=new Map,this.changed=[]}static{this.styles=[V,Yi]}willUpdate(e){if(e.has(`tiles`))for(let e of this.tiles)typeof e.value==`number`&&((this.prev.get(e.id)??0)!==e.value&&this.changed.push(e.id),this.prev.set(e.id,e.value))}render(){return k`<div class="tiles" part="tiles" style=${this.columns===5?j:`--cae-stat-tiles-columns:${this.columns}`}>
|
|
36
|
+
${H(this.tiles,e=>e.id,e=>this.tile(e))}
|
|
37
|
+
</div>`}tile(e){let t=e.tone??`neutral`;return k`<div class="tile" part="tile" data-tone=${I(t)} data-id=${e.id} title=${e.tip??j}>
|
|
38
|
+
<div class="label words" part="label" data-mark=${Yr(t)??j}>${e.label}</div>
|
|
39
|
+
<div class="value" part="value">${typeof e.value==`number`?k`<cae-count .value=${e.value}></cae-count>`:e.value}</div>
|
|
40
|
+
${(e.sub??[]).map(e=>k`<div class="sub words" part="sub">${di(e)}</div>`)}
|
|
41
|
+
${e.action?k`<div class="action words"><a class="lnk" part="action" href="#" @click=${t=>{t.preventDefault(),e.action&&L(this,`cae-action`,{id:e.id,action:e.action.id})}}>${e.action.label}</a></div>`:j}
|
|
42
|
+
</div>`}updated(){let e=this.changed;if(this.changed=[],this.bump&&!globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches)for(let t of this.renderRoot.querySelectorAll(`.tile`))e.includes(t.dataset.id??``)&&t.animate?.([{transform:`scale(1)`},{transform:`scale(1.04)`,boxShadow:`0 0 0 1px var(--line2)`,offset:.35},{transform:`scale(1)`}],{duration:700,easing:`cubic-bezier(.2,.8,.2,1)`})}};U([P({attribute:!1})],Xi.prototype,`tiles`,void 0),U([P({type:Number})],Xi.prototype,`columns`,void 0),U([P({type:Boolean})],Xi.prototype,`bump`,void 0);var Zi={omitted:e=>e===1?`1 bar not shown`:`${e} bars not shown`,empty:`No bars`},Qi=O` :host{display:block;container-type:inline-size;--label:var(--cae-lanes-label-width,112px);}@container (max-width:760px){.lanes{--label:var(--cae-lanes-label-width,78px);}}@container (max-width:480px){.axis span:nth-child(even){display:none;}}.lanes{position:relative;}.axis{display:flex;justify-content:space-between;font-family:var(--mono);font-size:10px;color:var(--text-muted);margin:0 0 6px calc(var(--label) + 8px);}.lane{display:grid;grid-template-columns:var(--label) minmax(0,1fr);gap:8px;align-items:center;min-height:24px;padding:4px 0;}.name{font-size:11.5px;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.track{position:relative;height:calc(var(--rows,1) * 14px + 2px);border-radius:4px;background:repeating-linear-gradient(90deg,color-mix(in srgb,var(--text) 5%,transparent) 0 1px,transparent 1px 10%);}.bar{position:absolute;top:calc(var(--row,0) * 14px + 2px);height:12px;border-radius:4px;min-width:3px;cursor:default;transform-origin:left center;transition:width 1s linear;}.anim .bar:not(.running){animation:growx 0.6s var(--ease) both;}:is(.bar,.legend i)[data-pattern]{background:var(--bar);}:is(.bar,.legend i)[data-pattern='hatched']{background:repeating-linear-gradient(135deg,var(--bar) 0 3px,color-mix(in srgb,var(--bar) 55%,var(--bg)) 3px 5px);}:is(.bar,.legend i)[data-pattern='outline']{background:none;box-shadow:inset 0 0 0 1.5px var(--bar);}:is(.bar,.legend i)[data-pattern='striped']{background:repeating-linear-gradient(45deg,var(--bar) 0 6px,color-mix(in srgb,var(--bar) 60%,var(--bg)) 6px 12px);background-size:17px 17px;}.bar[data-pattern='striped']{animation:stripes 0.8s linear infinite;box-shadow:0 0 12px color-mix(in srgb,var(--bar) 45%,transparent);}.bar:hover{filter:brightness(1.2);}.now{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--status-running);border-radius:2px;box-shadow:0 0 10px var(--status-running);}.legend{margin-top:10px;}.legend + .legend{margin-top:4px;}`,$i=class extends M{constructor(...e){super(...e),this.lanes=[],this.barStyles={},this.range=null,this.live=!1,this.omitted=0,this.locale=``,this.strings={},this.timer=null,this.drawn=!1}static{this.styles=[V,oi,Qi]}connectedCallback(){super.connectedCallback(),this.tick(this.live)}disconnectedCallback(){super.disconnectedCallback(),this.tick(!1)}updated(e){e.has(`live`)&&this.tick(this.live)}tick(e){e&&!this.timer&&(this.timer=setInterval(()=>this.requestUpdate(),1e3)),!e&&this.timer&&(clearInterval(this.timer),this.timer=null)}time(e,t){let n=this.locale||document.documentElement.lang||void 0;return new Date(e).toLocaleTimeString(n,{hour:`2-digit`,minute:`2-digit`,...t?{second:`2-digit`}:{},hourCycle:`h23`})}render(){let e=jr(Zi,this.strings),t=Date.now(),n=this.range??function(e,t){let n=e.flatMap(e=>e.bars);if(!n.length)return null;let r=Math.min(...n.map(e=>e.start));return{start:r,end:n.some(e=>e.end===null)?r+6e4*Math.ceil((t-r+2e4)/6e4):Math.max(...n.map(e=>e.end??t))}}(this.lanes,t);if(!n)return k`<div part="empty"><slot name="empty">${e.empty}</slot></div>`;let r=!this.drawn;this.drawn=!0;let i=Math.max(1,n.end-n.start),a=this.lanes.some(e=>e.bars.some(e=>e.end===null)),o=i<6e5,s=Math.min(1,(t-n.start)/i);return k`<div class="lanes ${r?`anim`:``}">
|
|
43
|
+
<div class="axis" part="axis">${[0,.25,.5,.75,1].map(e=>k`<span>${this.time(n.start+i*e,o)}</span>`)}</div>
|
|
44
|
+
${H(this.lanes,e=>e.id,e=>this.lane(e,n,t))}
|
|
45
|
+
${a?k`<span class="now" part="now" style="left:calc(var(--label) + 8px + (100% - var(--label) - 8px) * ${s.toFixed(4)})"></span>`:j}
|
|
46
|
+
</div>
|
|
47
|
+
${this.legends(e)}`}lane(e,t,n){let r=function(e){let t=[];return[...e].sort((e,t)=>e.start-t.start).map(e=>{let n=e.end??1/0,r=t.findIndex(t=>t<=e.start);return r<0?r=t.push(n)-1:t[r]=n,{bar:e,row:r}})}(e.bars),i=Math.max(1,...r.map(e=>e.row+1));return k`<div class="lane" part="lane">
|
|
48
|
+
<span class="name" part="lane-label" title=${e.label}>${e.label}</span>
|
|
49
|
+
<div class="track" part="track" style="--rows:${i}">
|
|
50
|
+
${r.map(({bar:e,row:r})=>{let i=function(e,t,n){let r=Math.max(1,t.end-t.start),i=(e.start-t.start)/r*100,a=((e.end??n)-e.start)/r*100;return{left:i,width:Math.max(.4,e.end===null?Math.min(100-i,a):a)}}(e,t,n),a=this.barStyles[e.style];return k`<span class="bar ${e.end===null?`running`:``}" part="bar" data-style=${e.style} data-pattern=${a?.pattern??`solid`} title=${e.label} style="--bar:${a?.color??`var(--line2)`};--row:${r};left:min(${i.left.toFixed(3)}%, 100% - max(3px, ${i.width.toFixed(3)}%));width:${i.width.toFixed(3)}%"></span>`})}
|
|
51
|
+
</div>
|
|
52
|
+
</div>`}legends(e){let t=[];for(let e of Object.values(this.barStyles)){let n=e.group??0;(t[n]??=[]).push({label:e.label,icon:k`<i data-pattern=${e.pattern??`solid`} style="--bar:${e.color}"></i>`})}let n=t.filter(Boolean);return this.omitted&&(n.length||n.push([]),n[n.length-1].push({label:e.omitted(this.omitted)})),n.map(e=>ai(e))}};U([P({attribute:!1})],$i.prototype,`lanes`,void 0),U([P({attribute:!1})],$i.prototype,`barStyles`,void 0),U([P({attribute:!1})],$i.prototype,`range`,void 0),U([P({type:Boolean})],$i.prototype,`live`,void 0),U([P({type:Number})],$i.prototype,`omitted`,void 0),U([P()],$i.prototype,`locale`,void 0),U([P({attribute:!1})],$i.prototype,`strings`,void 0);var ea={empty:`No values`,showTable:`Show table`,showChart:`Show chart`,label:`Label`,other:`Other`,total:`Total`,none:`—`,scale:(e,t)=>`${e} to ${t}`},ta=`var(--meter)`,na=e=>e<6?`var(--series-${e+1})`:ta;function ra(e,t,n=4){let r=Math.min(0,e),i=Math.max(0,t);if(!(i>r))return{min:0,max:1,ticks:[0,1]};let a=(i-r)/n,o=10**Math.floor(Math.log10(a)),s=[1,2,2.5,5,10].map(e=>e*o).find(e=>e>=a)??10*o,c=Math.floor(r/s)*s,l=Math.ceil(i/s)*s,u=[];for(let e=c;e<=l+s/2;e+=s)u.push(Math.round(e/s)*s);return{min:c,max:l,ticks:u}}function ia(e,t,n){return e<=0||t<=0?1:Math.max(1,Math.ceil(e*n/t))}var aa,oa=e=>String(Math.round(100*e)/100),sa=new Map,ca=class extends M{constructor(...e){super(...e),this.label=``,this.format=oa,this.strings={},this.height=200,this.width=0,this.asTable=!1,this.active=null,this.resized=null,this.fontsLoaded=()=>{sa.clear(),this.requestUpdate()},this.onKey=e=>{let t=this.itemCount();if(!t)return;let n=this.active,r=n,i=this.rowLength(),a=e.key===`ArrowRight`?1:e.key===`ArrowLeft`?-1:e.key===`ArrowDown`?i:e.key===`ArrowUp`?-i:0;if(a)r=n===null?a>0?0:t-1:Math.min(t-1,Math.max(0,n+a));else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t-1;else{if(e.key!==`Escape`)return;r=null}e.preventDefault(),this.active=r}}static{this.styles=[V,oi,O` :host{display:block;min-width:0;}.head{display:flex;align-items:flex-start;gap:12px;margin-bottom:8px;min-height:22px;}.head .legend{flex:1;min-width:0;}.head .legend span{color:var(--text-2);}.switch{margin-left:auto;flex:none;background:none;border:1px solid var(--line);border-radius:999px;padding:2px 10px;font:inherit;font-size:var(--font-size-sm);color:var(--text-muted);cursor:pointer;}.switch:hover,.switch:focus-visible{color:var(--text);border-color:var(--line2);}.plot{position:relative;outline-offset:2px;}.plot:focus-visible{outline:2px solid var(--accent);border-radius:var(--radius-sm);}svg{display:block;overflow:visible;}.axis{font-size:${10.5}px;fill:var(--text-muted);font-variant-numeric:tabular-nums;}.grid{stroke:var(--line);stroke-width:1;shape-rendering:crispEdges;}.base{stroke:var(--line2);stroke-width:1;shape-rendering:crispEdges;}.hit{fill:transparent;}.band{fill:var(--text);opacity:0.05;}.tip{position:absolute;z-index:2;pointer-events:none;padding:6px 9px;border-radius:var(--radius-sm);background:var(--raise);border:1px solid var(--line2);box-shadow:0 4px 14px var(--shadow);color:var(--text);font-size:var(--font-size-sm);white-space:nowrap;line-height:1.45;}.tip b{font-weight:600;}.tip .row{display:flex;align-items:center;gap:6px;}.tip .row i{width:9px;height:9px;border-radius:2px;flex:none;}.tip .row .v{margin-left:auto;padding-left:12px;font-variant-numeric:tabular-nums;}.scale{display:inline-flex;gap:1px;margin-right:6px;vertical-align:-1px;}.legend .scale i{width:12px;height:10px;margin:0;border-radius:2px;}.empty{padding:18px 0;color:var(--text-muted);font-size:var(--font-size-sm);}table{border-collapse:collapse;font-size:var(--font-size-sm);font-variant-numeric:tabular-nums;}.tbl{overflow-x:auto;max-width:100%;}th,td{padding:4px 12px 4px 0;text-align:right;white-space:nowrap;border-bottom:1px solid var(--line);}th{color:var(--text-muted);font-weight:500;}th:first-child,td:first-child{text-align:left;}td{color:var(--text-2);}`]}get words(){return jr(ea,this.strings)}connectedCallback(){super.connectedCallback(),typeof ResizeObserver<`u`&&(this.resized??=new ResizeObserver(e=>{let t=Math.floor(e[0]?.contentRect.width??0);t&&Math.abs(t-this.width)>=1&&(this.width=t)}),this.resized.observe(this),document.fonts?.addEventListener(`loadingdone`,this.fontsLoaded))}disconnectedCallback(){super.disconnectedCallback(),this.resized?.disconnect(),document.fonts?.removeEventListener(`loadingdone`,this.fontsLoaded)}labelWidth(e){let t=getComputedStyle(this);return Math.ceil(function(e,t){if(aa??=typeof document>`u`?null:document.createElement(`canvas`).getContext(`2d`),!aa)return 10.5*e.length*.62;let n=`${t}\n${e}`,r=sa.get(n);return r===void 0&&(aa.font=t,r=aa.measureText(e).width,sa.set(n,r)),r}(e,`${t.fontStyle} ${t.fontWeight} 10.5px ${t.fontFamily}`))+6}firstUpdated(){this.width||=Math.floor(this.getBoundingClientRect().width)||600}get plotWidth(){return Math.max(240,this.width||600)}rowLength(){return 1}render(){let e=this.words;if(!this.hasValues())return k`<div class="empty" part="empty">${e.empty}</div>`;let t=this.legendItems();return k`<div class="head">
|
|
53
|
+
${t.length?ai(t,{label:this.label}):k`<span class="legend"></span>`}
|
|
54
|
+
<button type="button" class="switch" part="switch" aria-pressed=${this.asTable} @click=${()=>(this.asTable=!this.asTable,this.active=null)}>${this.asTable?e.showChart:e.showTable}</button>
|
|
55
|
+
</div>
|
|
56
|
+
${this.asTable?k`<div class="tbl" part="table">${this.table()}</div>`:k`<div class="plot" part="plot" tabindex=${this.itemCount()?0:j} role="group" aria-label=${this.label||j} @keydown=${this.onKey} @blur=${()=>this.active=null} @mouseleave=${()=>this.active=null}>${this.plot()}</div>`}`}tip(e,t,n){let r=this.plotWidth,i=e>.6*r?`right`:`left`;return k`<div class="tip" role="status" style="${i}: ${i===`left`?Math.max(0,e+12):Math.max(0,r-e+12)}px; top: ${Math.max(0,t)}px">${n}</div>`}tipRow(e,t,n){return k`<div class="row">${e?k`<i style="background: ${e}"></i>`:j}<span>${t}</span><span class="v">${n}</span></div>`}};function la(e,t,n,r,i){if(r<=0||n<=0)return``;let a=i?Math.min(4,n/2,r):0;return`M${e},${t+r}V${t+a}${a?`Q${e},${t} ${e+a},${t}`:``}H${e+n-a}${a?`Q${e+n},${t} ${e+n},${t+a}`:``}V${t+r}Z`}U([P()],ca.prototype,`label`,void 0),U([P({attribute:!1})],ca.prototype,`format`,void 0),U([P({attribute:!1})],ca.prototype,`strings`,void 0),U([P({type:Number})],ca.prototype,`height`,void 0),U([F()],ca.prototype,`width`,void 0),U([F()],ca.prototype,`asTable`,void 0),U([F()],ca.prototype,`active`,void 0);var ua=class extends ca{constructor(...e){super(...e),this.x=[],this.series=[],this.stacked=!1}get drawn(){return function(e,t){if(e.length<=6)return e.map((e,t)=>({...e,colour:na(t)}));let n=e.slice(0,5).map((e,t)=>({...e,colour:na(t)})),r=e.slice(5),i=Math.max(...r.map(e=>e.values.length)),a=Array.from({length:i},(e,t)=>{let n=r.map(e=>e.values[t]).filter(e=>e!=null);return n.length?n.reduce((e,t)=>e+t,0):null});return[...n,{name:t,values:a,colour:ta,folded:r.map(e=>e.name)}]}(this.series,this.words.other)}hasValues(){return this.x.length>0&&this.series.some(e=>e.values.some(e=>e!=null))}legendItems(){let e=this.drawn;return e.length>1?e.map(e=>({label:e.name,swatch:e.colour})):[]}itemCount(){return this.x.length}total(e){return this.drawn.reduce((t,n)=>t+Math.max(0,n.values[e]??0),0)}plot(){let e=this.drawn,t=this.x.length,n=e.flatMap(e=>e.values.filter(e=>e!=null)),r=this.stacked?Math.max(0,...this.x.map((e,t)=>this.total(t))):Math.max(0,...n),i=ra(Math.min(0,...n),r),a=Math.max(...i.ticks.map(e=>this.labelWidth(this.format(e))))+4,o=this.plotWidth,s=this.height,c=o-a-4,l=s-8-22,u=e=>8+l-(e-i.min)/(i.max-i.min)*l,d=c/t,f=Math.max(2,Math.min(40,d*(this.stacked||e.length===1?.62:.8))),p=ia(t,c,Math.max(...this.x.map(e=>this.labelWidth(e)))+12),m=[];for(let n=0;n<t;n++){let t=a+n*d+(d-f)/2;if(this.stacked){let r=0,i=e.map(e=>({s:e,v:Math.max(0,e.values[n]??0)})).filter(e=>e.v>0);i.forEach((e,n)=>{let a=u(r+e.v),o=u(r)-a-(n>0?2:0);m.push(A`<path d=${la(t,a,f,Math.max(0,o),n===i.length-1)} fill=${e.s.colour}></path>`),r+=e.v})}else{let r=(f-2*(e.length-1))/e.length;e.forEach((e,i)=>{let a=e.values[n];if(a==null||a===0)return;let o=u(Math.max(0,a)),s=u(Math.min(0,a));m.push(A`<path d=${la(t+i*(r+2),o,Math.max(1,r),s-o,a>0)} fill=${e.colour}></path>`)})}}let h=this.active;return k`<svg width=${o} height=${s} role="img" aria-label=${this.label||j}>
|
|
57
|
+
${i.ticks.map(e=>A`<line class=${e===0?`base`:`grid`} x1=${a} x2=${o-4} y1=${u(e)} y2=${u(e)}></line>
|
|
58
|
+
<text class="axis" x=${a-6} y=${u(e)} dy="0.32em" text-anchor="end">${this.format(e)}</text>`)}
|
|
59
|
+
${h===null?j:A`<rect class="band" x=${a+h*d} y=${8} width=${d} height=${l}></rect>`}
|
|
60
|
+
${m}
|
|
61
|
+
${this.x.map((e,t)=>t%p===0?A`<text class="axis" x=${a+t*d+d/2} y=${s-6} text-anchor="middle">${e}</text>`:j)}
|
|
62
|
+
${this.x.map((e,t)=>A`<rect class="hit" x=${a+t*d} y=${8} width=${d} height=${l+22} @mouseenter=${()=>this.active=t}></rect>`)}
|
|
63
|
+
</svg>
|
|
64
|
+
${h!==null&&h<t?this.tip(a+h*d+d/2,8,this.tipBody(h)):j}`}tipBody(e){let t=this.drawn,n=this.words.none;return k`<b>${this.x[e]}</b>
|
|
65
|
+
${[...t].reverse().map(t=>this.tipRow(t.colour,t.name,t.values[e]===null||t.values[e]===void 0?n:this.format(t.values[e])))}
|
|
66
|
+
${this.stacked&&t.length>1?this.tipRow(null,this.words.total,this.format(this.total(e))):j}`}table(){let e=this.drawn,t=this.words.none,n=this.stacked&&e.length>1;return k`<table aria-label=${this.label||j}>
|
|
67
|
+
<thead><tr><th scope="col">${this.words.label}</th>${e.map(e=>k`<th scope="col">${e.name}</th>`)}${n?k`<th scope="col">${this.words.total}</th>`:j}</tr></thead>
|
|
68
|
+
<tbody>${this.x.map((r,i)=>k`<tr><th scope="row">${r}</th>${e.map(e=>k`<td>${e.values[i]===null||e.values[i]===void 0?t:this.format(e.values[i])}</td>`)}${n?k`<td>${this.format(this.total(i))}</td>`:j}</tr>`)}</tbody>
|
|
69
|
+
</table>`}};U([P({attribute:!1})],ua.prototype,`x`,void 0),U([P({attribute:!1})],ua.prototype,`series`,void 0),U([P({type:Boolean})],ua.prototype,`stacked`,void 0);var da=class extends ca{constructor(...e){super(...e),this.x=[],this.series=[]}hasValues(){return this.x.length>0&&this.series.some(e=>e.values.some(e=>e!=null))}legendItems(){return this.series.length>1?this.series.map((e,t)=>({label:e.name,swatch:na(t)})):[]}itemCount(){return this.x.length}plot(){let e=this.x.length,t=this.series.flatMap(e=>e.values.filter(e=>e!=null)),n=ra(Math.min(0,...t),Math.max(0,...t)),r=Math.max(...n.ticks.map(e=>this.labelWidth(this.format(e))))+4,i=this.plotWidth,a=this.height,o=i-r-10,s=a-8-22,c=e>1?o/(e-1):0,l=t=>e>1?r+t*c:r+o/2,u=e=>8+s-(e-n.min)/(n.max-n.min)*s,d=ia(e,o,Math.max(...this.x.map(e=>this.labelWidth(e)))+12),f=this.active,p=e>1?c:o;return k`<svg width=${i} height=${a} role="img" aria-label=${this.label||j}>
|
|
70
|
+
${n.ticks.map(e=>A`<line class=${e===0?`base`:`grid`} x1=${r} x2=${i-10} y1=${u(e)} y2=${u(e)}></line>
|
|
71
|
+
<text class="axis" x=${r-6} y=${u(e)} dy="0.32em" text-anchor="end">${this.format(e)}</text>`)}
|
|
72
|
+
${f===null?j:A`<line class="base" x1=${l(f)} x2=${l(f)} y1=${8} y2=${8+s}></line>`}
|
|
73
|
+
${this.series.map((e,t)=>{let n=this.x.map((t,n)=>{let r=e.values[n];return r==null?null:[l(n),u(r)]}),r=n.filter((e,t)=>e&&!n[t-1]&&!n[t+1]);return A`<path d=${function(e){let t=``,n=!1;for(let r of e)r?(t+=`${n?`L`:`M`}${r[0].toFixed(1)},${r[1].toFixed(1)}`,n=!0):n=!1;return t}(n)} fill="none" stroke=${na(t)} stroke-width="2" stroke-linejoin="round" stroke-linecap="round"></path>
|
|
74
|
+
${r.map(e=>A`<circle cx=${e[0]} cy=${e[1]} r="2.5" fill=${na(t)}></circle>`)}`})}
|
|
75
|
+
${f===null?j:this.series.map((e,t)=>{let n=e.values[f];return n==null?j:A`<circle cx=${l(f)} cy=${u(n)} r="4.5" fill=${na(t)} stroke="var(--card)" stroke-width="2"></circle>`})}
|
|
76
|
+
${this.x.map((t,n)=>n%d===0?A`<text class="axis" x=${l(n)} y=${a-6} text-anchor=${e>1&&n===0?`start`:e>1&&n===e-1?`end`:`middle`}>${t}</text>`:j)}
|
|
77
|
+
${this.x.map((e,t)=>A`<rect class="hit" x=${l(t)-p/2} y=${8} width=${p} height=${s+22} @mouseenter=${()=>this.active=t}></rect>`)}
|
|
78
|
+
</svg>
|
|
79
|
+
${f!==null&&f<e?this.tip(l(f),8,this.tipBody(f)):j}`}tipBody(e){let t=this.words.none;return k`<b>${this.x[e]}</b>
|
|
80
|
+
${this.series.map((n,r)=>this.tipRow(na(r),n.name,n.values[e]===null||n.values[e]===void 0?t:this.format(n.values[e])))}`}table(){let e=this.words.none;return k`<table aria-label=${this.label||j}>
|
|
81
|
+
<thead><tr><th scope="col">${this.words.label}</th>${this.series.map(e=>k`<th scope="col">${e.name}</th>`)}</tr></thead>
|
|
82
|
+
<tbody>${this.x.map((t,n)=>k`<tr><th scope="row">${t}</th>${this.series.map(t=>k`<td>${t.values[n]===null||t.values[n]===void 0?e:this.format(t.values[n])}</td>`)}</tr>`)}</tbody>
|
|
83
|
+
</table>`}};U([P({attribute:!1})],da.prototype,`x`,void 0),U([P({attribute:!1})],da.prototype,`series`,void 0);var fa=[16,34,52,72,92],pa=e=>`color-mix(in srgb, var(--series-1) ${e}%, var(--card))`;function ma(e,t,n){if(!(n>t))return fa.length-1;let r=(e-t)/(n-t);return Math.min(fa.length-1,Math.max(0,Math.floor(r*fa.length)))}var ha=class extends ca{constructor(...e){super(...e),this.x=[],this.y=[],this.values=[]}get range(){let e=this.values.flat().filter(e=>e!=null);return e.length?[Math.min(0,...e),Math.max(...e)]:[0,0]}hasValues(){return this.x.length>0&&this.y.length>0&&this.values.some(e=>e.some(e=>e!=null))}legendItems(){let[e,t]=this.range,n=k`<span class="scale" aria-hidden="true">${fa.map(e=>k`<i style="background: ${pa(e)}"></i>`)}</span>`;return[{label:this.words.scale(this.format(e),this.format(t)),icon:n}]}itemCount(){return this.x.length*this.y.length}rowLength(){return this.x.length}plot(){let e=this.x.length,t=this.y.length,[n,r]=this.range,i=Math.max(...this.y.map(e=>this.labelWidth(e)))+2,a=this.plotWidth,o=a-i-2,s=o/e,c=2+22*t+22,l=ia(e,o,Math.max(...this.x.map(e=>this.labelWidth(e)))+12),u=this.active,d=[];for(let a=0;a<t;a++)for(let t=0;t<e;t++){let o=this.values[a]?.[t],c=i+t*s,l=2+22*a,f=a*e+t;d.push(o==null?A`<rect x=${c+1} y=${l+1} width=${Math.max(1,s-2)} height=${20} rx="2" fill="none" stroke="var(--line)" @mouseenter=${()=>this.active=f}></rect>`:A`<rect x=${c+1} y=${l+1} width=${Math.max(1,s-2)} height=${20} rx="2" fill=${pa(fa[ma(o,n,r)]??92)} stroke=${u===f?`var(--text)`:`none`} stroke-width="1.5" @mouseenter=${()=>this.active=f}></rect>`)}let f=u!==null&&u<e*t?{r:Math.floor(u/e),c:u%e}:null;return k`<svg width=${a} height=${c} role="img" aria-label=${this.label||j}>
|
|
84
|
+
${this.y.map((e,t)=>A`<text class="axis" x=${i-6} y=${2+22*t+11} dy="0.32em" text-anchor="end">${e}</text>`)}
|
|
85
|
+
${d}
|
|
86
|
+
${this.x.map((e,t)=>t%l===0?A`<text class="axis" x=${i+t*s+s/2} y=${c-6} text-anchor="middle">${e}</text>`:j)}
|
|
87
|
+
</svg>
|
|
88
|
+
${f?this.tip(i+f.c*s+s/2,2+22*(f.r+1),this.tipBody(f.r,f.c)):j}`}tipBody(e,t){let n=this.values[e]?.[t];return k`<b>${this.y[e]} | ${this.x[t]}</b>
|
|
89
|
+
<div class="row"><span>${n==null?this.words.none:this.format(n)}</span></div>`}table(){let e=this.words.none;return k`<table aria-label=${this.label||j}>
|
|
90
|
+
<thead><tr><th scope="col">${this.words.label}</th>${this.x.map(e=>k`<th scope="col">${e}</th>`)}</tr></thead>
|
|
91
|
+
<tbody>${this.y.map((t,n)=>k`<tr><th scope="row">${t}</th>${this.x.map((t,r)=>{let i=this.values[n]?.[r];return k`<td>${i==null?e:this.format(i)}</td>`})}</tr>`)}</tbody>
|
|
92
|
+
</table>`}};function ga(e){switch(e){case`failed`:return`color-mix(in srgb, var(--status-failed) 72%, var(--card))`;case`attention`:return`color-mix(in srgb, var(--status-attention) 68%, var(--card))`;case`running`:return`color-mix(in srgb, var(--status-running) 60%, var(--card))`;case`done`:return`color-mix(in srgb, var(--status-done) 30%, var(--card))`;case`muted`:return`color-mix(in srgb, var(--text-muted) 26%, var(--card))`;default:return`color-mix(in srgb, var(--text) 12%, var(--card))`}}function _a(e){return e===`done`?`✓`:e===`failed`?`✕`:e===`attention`?`◌`:``}U([P({attribute:!1})],ha.prototype,`x`,void 0),U([P({attribute:!1})],ha.prototype,`y`,void 0),U([P({attribute:!1})],ha.prototype,`values`,void 0);var va=[`failed`,`attention`,`running`,`done`,`muted`,`neutral`],ya=[``,`stripes`,`dots`,`cross`,`lines`];function ba(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.tone)??0;t.set(r.tone,e+1),n.set(xa(r),ya[e%ya.length])}return n}var xa=e=>`${e.tone}\0${e.label}`;function Sa(e){let t=new Map;for(let n of e)for(let e of n)e&&!t.has(xa(e))&&t.set(xa(e),e);return[...t.values()].sort((e,t)=>va.indexOf(e.tone)-va.indexOf(t.tone))}var Ca=class extends ca{constructor(...e){super(...e),this.x=[],this.y=[],this.cells=[],this.uid=`sg${Math.random().toString(36).slice(2,8)}`}static{this.styles=[...ca.styles,O` .mark{font-size:11px;font-weight:700;fill:var(--text);pointer-events:none;}.mark.quiet{font-weight:400;fill:var(--text-muted);}.legend .key{display:inline-grid;place-items:center;width:14px;height:14px;margin-right:6px;border-radius:3px;font-size:9.5px;font-weight:700;color:var(--text);vertical-align:-2px;}`]}hasValues(){return this.x.length>0&&this.y.length>0&&this.cells.some(e=>e.some(e=>!!e))}legendItems(){let e=Sa(this.cells),t=ba(e);return e.map(e=>{let n=function(e){let t=`color-mix(in srgb, var(--text) 45%, transparent)`;switch(e){case`stripes`:return`repeating-linear-gradient(45deg, ${t} 0 1.5px, transparent 1.5px 4px)`;case`dots`:return`radial-gradient(${t} 1px, transparent 1.3px) 0 0 / 4px 4px`;case`cross`:return`repeating-linear-gradient(45deg, ${t} 0 1px, transparent 1px 4px), repeating-linear-gradient(-45deg, ${t} 0 1px, transparent 1px 4px)`;case`lines`:return`repeating-linear-gradient(0deg, ${t} 0 1.5px, transparent 1.5px 4px)`;default:return``}}(t.get(xa(e))??``);return{label:e.label,icon:k`<span class="key" aria-hidden="true" data-texture=${t.get(xa(e))||j} style="background: ${n?`${n}, `:``}${ga(e.tone)}">${_a(e.tone)}</span>`}})}itemCount(){return this.x.length*this.y.length}rowLength(){return this.x.length}plot(){let e=this.x.length,t=this.y.length,n=Math.max(...this.y.map(e=>this.labelWidth(e)))+2,r=this.plotWidth,i=r-n-2,a=i/e,o=2+22*t+22,s=ia(e,i,Math.max(...this.x.map(e=>this.labelWidth(e)))+12),c=this.active,l=a-2>=14,u=ba(Sa(this.cells)),d=[];for(let r=0;r<t;r++)for(let t=0;t<e;t++){let i=this.cells[r]?.[t],o=r*e+t,s={x:n+t*a+1,y:2+22*r+1,w:Math.max(1,a-2),h:20};if(!i){d.push(A`<rect x=${s.x} y=${s.y} width=${s.w} height=${s.h} rx="2" fill="none" stroke="var(--line)" @mouseenter=${()=>this.active=o}></rect>`);continue}let f=l?_a(i.tone):``,p=u.get(xa(i))??``;d.push(A`<g @mouseenter=${()=>this.active=o}>
|
|
93
|
+
<rect x=${s.x} y=${s.y} width=${s.w} height=${s.h} rx="2" fill=${ga(i.tone)} stroke=${c===o?`var(--text)`:`none`} stroke-width="1.5"></rect>
|
|
94
|
+
${p?A`<rect class="texture" data-texture=${p} x=${s.x} y=${s.y} width=${s.w} height=${s.h} rx="2" fill=${`url(#${this.patternId(p)})`} pointer-events="none"></rect>`:j}
|
|
95
|
+
${f?A`<text class=${i.tone===`done`?`mark quiet`:`mark`} x=${s.x+s.w/2} y=${s.y+s.h/2} dy="0.35em" text-anchor="middle" aria-hidden="true">${f}</text>`:j}
|
|
96
|
+
</g>`)}let f=c!==null&&c<e*t?{r:Math.floor(c/e),c:c%e}:null;return k`<svg width=${r} height=${o} role="img" aria-label=${this.label||j}>
|
|
97
|
+
${this.patterns(new Set(u.values()))}
|
|
98
|
+
${this.y.map((e,t)=>A`<text class="axis" x=${n-6} y=${2+22*t+11} dy="0.32em" text-anchor="end">${e}</text>`)}
|
|
99
|
+
${d}
|
|
100
|
+
${this.x.map((e,t)=>t%s===0?A`<text class="axis" x=${n+t*a+a/2} y=${o-6} text-anchor="middle">${e}</text>`:j)}
|
|
101
|
+
</svg>
|
|
102
|
+
${f?this.tip(n+f.c*a+a/2,2+22*(f.r+1),this.tipBody(f.r,f.c)):j}`}patternId(e){return`${this.uid}-${e}`}patterns(e){let t=e=>A`<path d=${e} stroke="var(--text)" stroke-opacity="0.45" stroke-width="1.2"></path>`;return A`<defs>${[...e].filter(e=>e).map(e=>A`<pattern id=${this.patternId(e)} width="5" height="5" patternUnits="userSpaceOnUse">${(e=>e===`stripes`?t(`M-1 1 L1 -1 M0 5 L5 0 M4 6 L6 4`):e===`dots`?A`<circle cx="2.5" cy="2.5" r="0.9" fill="var(--text)" fill-opacity="0.5"></circle>`:t(e===`cross`?`M0 0 L5 5 M5 0 L0 5`:`M0 2.5 L5 2.5`))(e)}</pattern>`)}</defs>`}tipBody(e,t){let n=this.cells[e]?.[t];return k`<b>${this.y[e]} | ${this.x[t]}</b>
|
|
103
|
+
<div class="row">${n?k`<i style="background: ${ga(n.tone)}"></i><span>${n.label}</span>`:k`<span>${this.words.none}</span>`}</div>
|
|
104
|
+
${n?.tip?k`<div class="row"><span>${n.tip}</span></div>`:j}`}table(){let e=this.words.none;return k`<table aria-label=${this.label||j}>
|
|
105
|
+
<thead><tr><th scope="col">${this.words.label}</th>${this.x.map(e=>k`<th scope="col">${e}</th>`)}</tr></thead>
|
|
106
|
+
<tbody>${this.y.map((t,n)=>k`<tr><th scope="row">${t}</th>${this.x.map((t,r)=>{let i=this.cells[n]?.[r];return k`<td title=${i?.tip||j}>${i?i.label:e}</td>`})}</tr>`)}</tbody>
|
|
107
|
+
</table>`}};U([P({attribute:!1})],Ca.prototype,`x`,void 0),U([P({attribute:!1})],Ca.prototype,`y`,void 0),U([P({attribute:!1})],Ca.prototype,`cells`,void 0);var wa=class extends ca{constructor(...e){super(...e),this.bars=[]}static{this.styles=[...ca.styles,O` .bars{display:grid;grid-template-columns:minmax(80px,max-content) minmax(0,1fr) max-content;gap:6px 12px;align-items:center;font-size:var(--font-size-sm);}.bars .r{display:contents;}.bars .l{color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:34ch;}.bars .track{display:block;height:12px;}.bars .bar{display:block;height:100%;min-width:2px;border-radius:1px 4px 4px 1px;background:var(--series-1);}.bars .bar[data-tone]{background:var(--tone);}.bars .v{color:var(--text-2);font-variant-numeric:tabular-nums;text-align:right;}`]}hasValues(){return this.bars.length>0}legendItems(){return[]}itemCount(){return 0}plot(){let e=Math.max(0,...this.bars.map(e=>e.value));return k`<div class="bars" role="list" aria-label=${this.label||j}>
|
|
108
|
+
${this.bars.map(t=>k`<div class="r" role="listitem" aria-label="${t.label} | ${this.format(t.value)}">
|
|
109
|
+
<span class="l" aria-hidden="true" title=${t.label}>${t.label}</span>
|
|
110
|
+
<span class="track" aria-hidden="true"><span class="bar" data-tone=${I(t.tone)} style="width: ${e>0?100*Math.max(0,t.value)/e:0}%"></span></span>
|
|
111
|
+
<span class="v" aria-hidden="true">${this.format(t.value)}</span></div>`)}
|
|
112
|
+
</div>`}table(){return k`<table aria-label=${this.label||j}>
|
|
113
|
+
<tbody>${this.bars.map(e=>k`<tr><th scope="row">${e.label}</th><td>${this.format(e.value)}</td></tr>`)}</tbody>
|
|
114
|
+
</table>`}};U([P({attribute:!1})],wa.prototype,`bars`,void 0);var Ta={name:`Name`,expected:`Expected`,actual:`Value`,verdict:`Check`,optional:`optional`,items:e=>e===1?`1 item`:`${e} items`,object:`object`},Ea=O` .verdict{font-size:12px;}.verdict[data-verdict='pass']{color:var(--text-2);}.verdict[data-verdict='pass']>[aria-hidden]{color:var(--status-done);font-weight:700;}.verdict[data-verdict='fail']{color:var(--status-failed);font-weight:600;}.verdict[data-verdict='warn']{color:var(--status-attention);}.verdict[data-verdict='none']{color:var(--text-muted);}`,Da=O` :host{display:block;max-width:100%;}table{width:auto;max-width:100%;border-collapse:collapse;}th{text-align:left;font-size:11.5px;color:var(--text-muted);font-weight:600;padding:4px 20px 4px 0;border-bottom:1px solid var(--line);}td{padding:5px 20px 5px 0;border:0;border-bottom:1px solid var(--line);vertical-align:baseline;font-size:12.5px;}th:last-child,td:last-child{padding-right:0;}td.value{overflow-wrap:anywhere;}tbody tr:last-child td{border-bottom:0;}td:first-child{font-weight:600;overflow-wrap:anywhere;}td:last-child{white-space:nowrap;}i{font-style:normal;color:var(--text-muted);font-size:11px;margin-left:4px;}.js{color:var(--code-string);}.jn{color:var(--code-number);}`;function Oa(e,t,n=``){if(e===`none`&&!t)return j;let r=e===`pass`?`✓`:e===`fail`?`✕`:``;return k`<span class="verdict" part="verdict" data-verdict=${e} title=${n||j}>${r?k`<span aria-hidden="true">${r}</span> `:j}${t}</span>`}var ka=(e,t)=>e.length>t?`${e.slice(0,t)}…`:e,Aa=class extends M{constructor(...e){super(...e),this.rows=[],this.showValues=!0,this.strings={}}static{this.styles=[V,Ea,Da]}render(){let e=jr(Ta,this.strings),t=this.showValues;return k`<table part="table">
|
|
115
|
+
<thead><tr>
|
|
116
|
+
<th scope="col">${e.name}</th><th scope="col">${e.expected}</th>
|
|
117
|
+
${t?k`<th scope="col">${e.actual}</th><th scope="col">${e.verdict}</th>`:j}
|
|
118
|
+
</tr></thead>
|
|
119
|
+
<tbody>
|
|
120
|
+
${this.rows.map(n=>k`<tr part="row">
|
|
121
|
+
<td class="jmono">${n.name}</td>
|
|
122
|
+
<td class=${n.extra?`jdim`:`jmono jdim`}>${n.expected}${n.optional?k` <i>${e.optional}</i>`:j}</td>
|
|
123
|
+
${t?k`<td class="value">${function(e,t){if(e===void 0)return k`<span class="jdim">—</span>`;if(typeof e==`string`)return k`<span class="js" title=${e}>"${ka(e,90)}"</span>`;if(Array.isArray(e)){let n=e.slice(0,3).map(e=>typeof e==`string`?`"${ka(e,28)}"`:JSON.stringify(e)).join(`, `);return k`<span class="jn">${t.items(e.length)}</span>
|
|
124
|
+
<span class="jdim">${n}${e.length>3?`, …`:``}</span>`}return typeof e==`object`&&e?k`<span class="jn">${t.object}</span> <span class="jdim">${Object.keys(e).slice(0,4).join(`, `)}</span>`:k`<span class="jn">${JSON.stringify(e)}</span>`}(n.hasValue?n.value:void 0,e)}</td>
|
|
125
|
+
<td>${Oa(n.verdict,n.verdictLabel,n.tip)}</td>`:j}
|
|
126
|
+
</tr>`)}
|
|
127
|
+
</tbody>
|
|
128
|
+
</table>`}};U([P({attribute:!1})],Aa.prototype,`rows`,void 0),U([P({type:Boolean})],Aa.prototype,`showValues`,void 0),U([P({attribute:!1})],Aa.prototype,`strings`,void 0);var ja={sortBy:`Sort`,rowsHeader:`Row`},Ma=O` :host{display:contents;}.mxblock{display:flex;flex-direction:column;width:fit-content;max-width:100%;min-width:min(100%,27rem);animation:view-in 0.1s var(--ease) both;}@keyframes view-in{from{opacity:0;}}@media (prefers-reduced-motion:reduce){.mxblock{animation:none;}}.mxbar{display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px;margin-bottom:8px;font-size:12px;color:var(--text-2);width:0;min-width:100%;box-sizing:border-box;}.mxbar .cap{color:var(--text);font-weight:600;}.mxbar .sum{flex:1 0 100%;min-width:0;}.mxbar .f{white-space:nowrap;}.sep{color:var(--text-muted);}.mxbar label{display:inline-flex;align-items:center;gap:6px;margin-left:auto;color:var(--text-muted);font-size:11.5px;white-space:nowrap;}.mxbar select{font:inherit;font-size:11.5px;color:var(--text);background:var(--card);border:1px solid var(--line);border-radius:6px;padding:2px 6px;}.mxbar select:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:1px;}.mx{overflow:auto;max-width:100%;max-height:max(${360}px,${pt(70)}vh);border-radius:6px;border:1px solid var(--line);}table.matrix{border-collapse:separate;border-spacing:0;font-size:11px;width:100%;min-width:max-content;}.matrix th,.matrix td{padding:0 6px;height:${24}px;border-bottom:1px solid var(--line);white-space:nowrap;}.matrix thead th{position:sticky;z-index:2;background:var(--panel2);color:var(--text-muted);font-weight:500;text-align:center;height:22px;}.matrix thead th.nh{font-family:var(--mono);color:var(--text-2);font-weight:600;max-width:110px;overflow:hidden;text-overflow:ellipsis;}.matrix thead th.group{color:var(--text-2);}.matrix thead th.group.code{font-family:var(--mono);color:var(--text-muted);}.matrix .uh,.matrix tbody th{position:sticky;left:0;z-index:1;background:var(--panel);text-align:left;}.matrix thead .uh{z-index:3;}.matrix thead .uh,.matrix thead .pn{background:var(--panel2);}.matrix tbody th{font-family:var(--mono);font-weight:600;color:var(--text);max-width:220px;overflow:hidden;text-overflow:ellipsis;}.matrix tbody th.none{font-family:var(--sans);font-weight:500;color:var(--text-muted);}.matrix .pn{text-align:right;color:var(--text-muted);font-variant-numeric:tabular-nums;}.matrix .pn.many{color:var(--text);font-weight:600;}.matrix td.c{text-align:center;--m:12px;}.matrix td.c .mark{vertical-align:middle;}.matrix .g0{border-left:1px solid var(--line2);}.matrix .g1{border-left:1px dashed var(--line);}.matrix tbody tr:hover td,.matrix tbody tr:hover th{background-color:color-mix(in srgb,var(--text-muted) 8%,transparent);}.matrix tbody tr.on td,.matrix tbody tr.on th{background-color:var(--accent-bg);}.matrix .gap td{padding:0;border:0;}.mx.hl .mark:not(.on){opacity:0.4;}.mx.hl .mark.on{transform:scale(1.2);}`,Na={caption:``,label:``,head:[],columns:[],rows:[]},Pa=class extends M{constructor(...e){super(...e),this.matrix=Na,this.states={},this.selected=null,this.highlight=null,this.key=``,this.windowAt=150,this.strings={},this.renderIcon=e=>pi(e),this.iconStyles=[],this.hover=null,this.scrollRow=0,this.cell=null,this.onScroll=e=>{let t=Math.floor(e.currentTarget.scrollTop/24);Math.abs(t-this.scrollRow)>=15&&(this.scrollRow=t)}}static{this.styles=[V,Jr,Ma]}static{this.properties={matrix:{attribute:!1},states:{attribute:!1},selected:{attribute:!1},highlight:{attribute:!1},key:{},windowAt:{type:Number},strings:{attribute:!1},renderIcon:{attribute:!1},iconStyles:{attribute:!1},hover:{state:!0},scrollRow:{state:!0}}}willUpdate(e){e.has(`key`)&&e.get(`key`)!==void 0&&(this.scrollRow=0,this.cell=null)}updated(e){e.has(`iconStyles`)&&this.renderRoot instanceof ShadowRoot&&mt(this.renderRoot,[...this.constructor.elementStyles,...this.iconStyles])}lit(){if(this.hover!==null)return this.hover;let e=this.selected?this.matrix.rows.find(e=>e.cells.some(e=>e?.id===this.selected)):void 0;return e?e.id||this.selected:this.highlight}select(e){e!==this.selected&&L(this,`cae-select`,{id:e})}act(e){e.drill?L(this,`cae-drill`,{id:e.id}):L(this,`cae-activate`,{id:e.id})}render(){let e=this.matrix,t=jr(ja,this.strings),n=e.rows,r=e.columns,i=this.lit(),a=r.map((e,t)=>{let n=r[t-1]?.groups;if(!n)return-1;let i=e.groups.findIndex((e,t)=>e!==n[t]);return i<0?e.groups.length===n.length?-1:Math.min(e.groups.length,n.length):i}),o=e.head.length,s=!!e.value,c=s?2:1,l=n.length>this.windowAt,u=l?Math.max(0,this.scrollRow-30):0,d=l?Math.min(n.length,this.scrollRow+60+20):n.length,f=this.cell&&this.cell[0]<n.length?this.cell:function(e){for(let t=0;t<e.length;t++){let n=e[t]?.cells.findIndex(e=>e!==null)??-1;if(n>=0)return[t,n]}return null}(n),p=e=>e===0||a[e]===0?`g0`:(a[e]??-1)>0?`g1`:``,m=(e,t,n)=>{let r=`top:${22*n}px`;return e.type===`group`?k`<th scope="colgroup" part="head-cell" colspan=${e.span} class="group ${e.code?`code`:``} ${p(t)}" style=${r} title=${e.tip??j} aria-label=${e.summary??j}>${e.label}</th>`:k`<th scope="col" part="head-cell" rowspan=${e.rows} class="nh ${p(t)}" style=${r} title=${e.tip??j} aria-label=${e.summary??j}>${(e.icons??[]).map(e=>this.renderIcon(e))}${e.label}</th>`},h=(e.facts??[]).filter(e=>typeof e==`string`?e:e.text);return k`<div class="mxblock view">
|
|
129
|
+
<div class="mxbar">
|
|
130
|
+
<span class="cap" title=${e.captionTip??j}>${e.caption}</span>
|
|
131
|
+
${e.sorts?.length?k`<label>${t.sortBy}
|
|
132
|
+
<select part="sort" @change=${e=>L(this,`cae-sort`,{id:e.target.value,direction:`asc`})}>
|
|
133
|
+
${e.sorts.map(t=>k`<option value=${t.id} ?selected=${e.sort===t.id}>${t.label}</option>`)}
|
|
134
|
+
</select>
|
|
135
|
+
</label>`:j}
|
|
136
|
+
<span class="sum">${h.map((e,t)=>k`${t?k`<span class="sep"> | </span>`:j}${typeof e==`string`?k`<span class="f">${e}</span>`:k`<span class="f tone-text" data-tone=${I(e.tone)}>${e.text}</span>`}`)}</span>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="mx ${i?`hl`:``}" @scroll=${this.onScroll} @mouseleave=${()=>this.hover=null}>
|
|
139
|
+
<table class="matrix big" part="matrix" role="grid" aria-rowcount=${n.length+o} aria-colcount=${r.length+c} aria-label=${e.label}>
|
|
140
|
+
<thead>
|
|
141
|
+
${e.head.map((n,r)=>{let i=(t=>{let n=[],r=0;for(let i of e.head[t]??[]){for(;Fa(e.head,t,r);)r++;n.push(r),r+=i.span}return n})(r);return k`<tr>
|
|
142
|
+
${r===0?k`<th scope="col" rowspan=${o} class="uh" style="top:0">${t.rowsHeader}</th>
|
|
143
|
+
${s?k`<th scope="col" rowspan=${o} class="pn" style="top:0" title=${e.value?.tip??j}>${e.value?.label}</th>`:j}`:j}
|
|
144
|
+
${n.map((e,t)=>m(e,i[t]??0,r))}
|
|
145
|
+
</tr>`})}
|
|
146
|
+
</thead>
|
|
147
|
+
<tbody @keydown=${e=>this.onKey(e,n)}>
|
|
148
|
+
${u>0?k`<tr class="gap" aria-hidden="true"><td colspan=${r.length+c} style="height:${24*u}px"></td></tr>`:j}
|
|
149
|
+
${H(n.slice(u,d),e=>e.id,(e,t)=>{let n=u+t;return k`<tr class=${e.id&&e.id===i?`on`:``} aria-rowindex=${n+o+1}>
|
|
150
|
+
<th scope="row" part="row-header" class=${e.muted?`none`:j} title=${e.tip??e.label}>${e.label}</th>
|
|
151
|
+
${s?k`<td class="pn ${e.strong?`many`:``}">${e.value}</td>`:j}
|
|
152
|
+
${e.cells.map((t,r)=>{let o=!!t&&f!==null&&f[0]===n&&f[1]===r;return k`<td class="c ${(e=>a[e]===0?`g0`:(a[e]??-1)>0?`g1`:``)(r)}" role="gridcell">${t?this.mark(e,t,n,r,o,i):j}</td>`})}
|
|
153
|
+
</tr>`})}
|
|
154
|
+
${d<n.length?k`<tr class="gap" aria-hidden="true"><td colspan=${r.length+c} style="height:${24*(n.length-d)}px"></td></tr>`:j}
|
|
155
|
+
</tbody>
|
|
156
|
+
</table>
|
|
157
|
+
</div>
|
|
158
|
+
</div>`}mark(e,t,n,r,i,a){let o=this.states[t.state],s=e.id||t.id,c=this.selected===t.id;return k`<button type="button" part="mark" class="mark ${e.id&&e.id===a?`on`:``} ${c?`sel`:``}" data-tone=${I(o?.tone)} data-shape=${o?.shape??j} data-r=${n} data-c=${r} tabindex=${i?0:-1} title=${t.tip??j} aria-label=${t.label} aria-pressed=${c} @mouseenter=${()=>this.hover=s} @focus=${()=>{this.hover=s,this.cell=[n,r],this.select(t.id)}} @blur=${()=>this.hover=null} @click=${()=>this.select(t.id)} @dblclick=${()=>this.act(t)}></button>`}onKey(e,t){let n=e.target;if(!n.classList.contains(`mark`))return;let r=Number(n.dataset.r),i=Number(n.dataset.c);if(e.key===`Enter`){let n=t[r]?.cells[i];e.preventDefault(),n&&this.act(n);return}let a=function(e,t,n,r,i=!1,a=10){let o=(t,n)=>!0===e[t]?.[n],s=t=>(e[t]??[]).findIndex(Boolean),c=t=>(e[t]??[]).lastIndexOf(!0),l=t=>{let r=e[t]??[],i=-1;return r.forEach((e,t)=>e&&(i<0||Math.abs(t-n)<Math.abs(i-n))&&(i=t)),i<0?null:[t,i]};switch(r){case`ArrowRight`:case`ArrowLeft`:{let i=r===`ArrowRight`?1:-1;for(let r=n+i;r>=0&&r<(e[t]?.length??0);r+=i)if(o(t,r))return[t,r];return null}case`ArrowDown`:case`ArrowUp`:{let i=r===`ArrowDown`?1:-1,a=((t,n,r)=>{for(let i=t;i>=0&&i<e.length;i+=n)if(o(i,r))return i;return-1})(t+i,i,n);if(a>=0)return[a,n];for(let n=t+i;n>=0&&n<e.length;n+=i)if(s(n)>=0)return l(n);return null}case`Home`:{let n=i?e.findIndex(e=>e.some(Boolean)):t;return n<0||s(n)<0?null:[n,s(n)]}case`End`:{let n=t;if(i)for(n=e.length-1;n>=0&&c(n)<0;n--);return n<0||c(n)<0?null:[n,c(n)]}case`PageDown`:case`PageUp`:{let n=r===`PageDown`?1:-1;for(let r=Math.max(0,Math.min(e.length-1,t+n*a));r!==t;r-=n)if(s(r)>=0)return l(r);return null}default:return null}}(t.map(e=>e.cells.map(e=>e!==null)),r,i,e.key,e.ctrlKey||e.metaKey);if(!a)return;e.preventDefault(),this.cell=a;let o=this.renderRoot.querySelector(`.mx`);if(o&&t.length>this.windowAt){let e=24*a[0];(e<o.scrollTop+48||e>o.scrollTop+o.clientHeight-72)&&(o.scrollTop=Math.max(0,e-o.clientHeight/2)),this.scrollRow=Math.floor(o.scrollTop/24)}this.requestUpdate(),this.updateComplete.then(()=>this.renderRoot.querySelector(`.matrix .mark[data-r="${a[0]}"][data-c="${a[1]}"]`)?.focus())}};function Fa(e,t,n){for(let r=0;r<t;r++){let i=0;for(let a of e[r]??[]){if(n>=i&&n<i+a.span&&r+a.rows>t)return!0;i+=a.span}}return!1}var Ia=(e,t,n)=>{let r=e.get(t);r?r.push(n):e.set(t,[n])},La=(e,t)=>`${e}\0${t}`;function Ra(e,t,n){let r=new Set(e),i=new Map(e.map(e=>[e,[]]));for(let[e,n]of t)e!==n&&r.has(e)&&r.has(n)&&!i.get(e)?.includes(n)&&i.get(e)?.push(n);let a=new Set,o=new Map;for(let t of e){if(o.has(t))continue;o.set(t,1);let e=[[t,0]];for(;e.length;){let t=e[e.length-1],n=i.get(t[0])??[];if(t[1]<n.length){let r=n[t[1]++],i=o.get(r);i===1?a.add(La(t[0],r)):i||(o.set(r,1),e.push([r,0]))}else o.set(t[0],2),e.pop()}}let s=new Map(e.map(e=>[e,[]])),c=new Map(e.map(e=>[e,[]]));for(let[e,t]of i)for(let n of t)a.has(La(e,n))||(s.get(e)?.push(n),c.get(n)?.push(e));let l=new Map(e.map(e=>[e,c.get(e)?.length??0])),u=e.filter(e=>!l.get(e)),d=new Map;for(let e=u.shift();e!==void 0;e=u.shift()){d.set(e,n.get(e)??Math.max(0,...(c.get(e)??[]).map(e=>(d.get(e)??0)+1)));for(let t of s.get(e)??[])l.set(t,(l.get(t)??0)-1),l.get(t)||u.push(t)}return d}var W=e=>e.startsWith(`~`);function za(e,t,n){let r=new Map;e.forEach((e,t)=>e.forEach(e=>r.set(e,t)));let i=new Map,a=new Map;for(let[e,n]of t)Ia(a,e,n),Ia(i,n,e);let o=new Map,s=e=>e.forEach((e,t)=>o.set(e,t)),c=e.map(e=>[...e]);c.forEach(s);let l=()=>function(e,t,n,r){let i=0,a=new Map;for(let[e,i]of t){let t=r.get(e);t!==void 0&&Ia(a,t,[n.get(e)??0,n.get(i)??0])}for(let e of a.values())for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++){let[r,a]=e[t],[o,s]=e[n];(r-o)*(a-s)<0&&i++}return e.length?i:0}(c,t,o,r),u=c.map(e=>[...e]),d=l(),f=(e,t)=>{let r=new Map;for(let n of e){let e=(t.get(n)??[]).map(e=>o.get(e)).filter(e=>e!==void 0);r.set(n,e.length?e.reduce((e,t)=>e+t,0)/e.length:o.get(n)??0)}let i=e=>r.get(e)??0;if(!n)return[...e].sort((e,t)=>i(e)-i(t)||(o.get(e)??0)-(o.get(t)??0));let a=e.filter(e=>!W(e)),s=e.filter(W).sort((e,t)=>i(e)-i(t)||(o.get(e)??0)-(o.get(t)??0)),c=[],l=0;for(let e of a){for(;l<s.length&&i(s[l])<i(e);)c.push(s[l++]);c.push(e)}return[...c,...s.slice(l)]};for(let e=0;e<4;e++){let t=e%2==0,n=t?c.map((e,t)=>t).slice(1):c.map((e,t)=>t).reverse().slice(1);for(let e of n){let n=f(c[e],t?i:a);c[e]=n,s(n)}let r=l();r<d&&(d=r,u=c.map(e=>[...e]))}return l()<=d?c:u}var Ba=new WeakMap;function Va(e,t,n=!1){let r=Ba.get(e)??[],i=r.find(e=>e.prev===t&&e.down===n);if(i)return i.out;let a=function(e,t,n){let r=new Set(e.clusters.map(e=>e.id)),i=new Map(e.clusters.map(e=>[e.id,e.parent])),a=new Map;for(let t of e.nodes)t.cluster&&a.set(t.id,t.cluster);let o=[...new Set(e.stubs.map(e=>e.id))],s=new Set(o),c=e=>{let t=[],n=r.has(e)?e:a.get(e)??null;for(;n;)t.push(n),n=i.get(n)??null;return t},l=(e,t)=>{let n=c(e);if(t===``)return n[n.length-1]??e;let r=n.indexOf(t);return r<0?void 0:r===0?e:n[r-1]},u=(e,t)=>c(e).find(e=>c(t).includes(e))??``,d=[``,...e.clusters.map(e=>e.id)],f=new Map(d.map(e=>[e,[]]));for(let{id:t}of e.nodes)for(let e of d){let n=l(t,e);n===void 0||f.get(e)?.includes(n)||f.get(e)?.push(n)}let p=new Map;for(let n of d){let r=f.get(n)??[],i=n===``?t?.layers:t?.clusters[n],a=new Map;i?.forEach((e,t)=>e.forEach(e=>r.includes(e)&&a.set(e,t)));let o=e.edges.filter(e=>e.ranks&&u(e.from,e.to)===n).map(e=>[l(e.from,n),l(e.to,n)]);p.set(n,Ra(r,o,a))}let m=p.get(``),h=new Map;t?.layers.forEach((e,t)=>e.forEach(e=>h.set(e,t)));let g=new Map(o.map(t=>[t,h.get(t)??Math.min(...e.stubs.filter(e=>e.id===t).map(e=>m.get(l(e.to,``))??0))-1]));if([...g.values()].some(e=>e<0)){for(let[e,t]of m)m.set(e,t+1);for(let[e,t]of g)g.set(e,t+1)}for(let[e,t]of g)m.set(e,t);let _=(e,t)=>p.get(e)?.get(t)??0,v=e=>Math.max(0,...p.get(e)?.values()??[]),y=e.edges.map(e=>((e,t)=>{let n=u(e,t);return _(n,l(e,n))>=_(n,l(t,n))})(e.from,e.to)),b=new Map;for(let e of d){let n=((e===``?t?.layers:t?.clusters[e])??[]).flat(),r=[...e===``?[...o]:[],...f.get(e)??[]];r.sort((e,t)=>{let r=n.indexOf(e),i=n.indexOf(t);return(r<0?1/0:r)-(i<0?1/0:i)});let i=Array.from({length:v(e)+1},()=>[]);for(let t of r)i[_(e,t)]?.push(t);b.set(e,i)}let x=[],S=new Set,ee=(e,t,n,r)=>{let i=`~${e}|${t}|${n}|${r}`;return S.has(i)||(S.add(i),b.get(e)?.[r]?.push(i)),{id:i,in:e}},te=(e,t,n,r)=>{let i=_(e,t),a=`~${e}|by:${t}|${n}|${r}|${i}`;return S.has(a)||(S.add(a),b.get(e)?.[i]?.push(a)),{id:a,in:e}},ne=(e,t,r)=>{let o=s.has(e)?``:u(e,t),d=(p=e,s.has(p)?``:a.get(p)??``),f=e;var p;let m=[{id:e,in:d}];for(;d!==o;){let e=i.get(d)??``;m.push({id:d,in:e}),_(d,f)<v(d)&&m.push(te(e,d,f,r)),f=d,d=e}let h=l(t,o);for(let e=_(o,f)+1;e<_(o,h);e++)m.push(ee(o,f,r,e));let g=c(t),y=g.slice(0,o===``?g.length:g.indexOf(o)).reverse(),b=`>${o}:${f}`,x=o;for(let e of y){let i=l(t,e);(_(e,i)>0||n)&&m.push(te(x,e,b,r)),m.push({id:e,in:x}),x=e}return m.push({id:t,in:x}),m};e.edges.forEach((e,t)=>{y[t]||x.push({from:e.from,to:e.to,style:e.style,steps:ne(e.from,e.to,e.style)})});for(let t of e.stubs)x.push({from:t.id,to:t.to,style:t.style,steps:ne(t.id,t.to,t.style)});let re={};for(let e of d){let n=[],r=new Map((b.get(e)??[]).flatMap((e,t)=>e.map(e=>[e,t])));for(let t of x)for(let i=1;i<t.steps.length;i++){let a=t.steps[i-1],o=t.steps[i];a.in===e&&o.in===e&&r.get(a.id)!==r.get(o.id)&&n.push([a.id,o.id])}let i=e===``?!!t:!!t?.clusters[e];re[e]=za(b.get(e)??[],n,i).map(e=>{let t=e.filter(e=>e.includes(`|by:`));return e.filter(e=>!e.includes(`|by:`)).flatMap(e=>[e,...t.filter(t=>t.includes(`|by:${e}|`))])})}let ie=e=>e.map(e=>e.filter(e=>!W(e))),ae=e.clusters.map(e=>({id:e.id,parent:e.parent,cycle:!!e.cycle,layers:ie(re[e.id]??[]).filter(e=>e.length)})),oe=ie(re[``]??[]).map(e=>e.filter(e=>!s.has(e))),se=new Map(ae.map(e=>[e.id,e])),ce=e=>e.flatMap(e=>r.has(e)?ce((se.get(e)?.layers??[]).flat()):[e]);return{drawn:ce(oe.flat()),layers:oe.filter(e=>e.length),clusters:ae,back:y,slots:re,edgePaths:x,order:{layers:ie(re[``]??[]),clusters:Object.fromEntries(ae.map(e=>[e.id,ie(re[e.id]??[])]))}}}(e,t,n);return Ba.set(e,[...r.slice(-3),{prev:t,down:n,out:a}]),a}function Ha(e){let t=new Map(e.clusters.map(e=>[e.id,e])),n=new Map,r=e=>{let i=0,a=0;for(let o of e){let e=0,s=0;for(let i of o){let a=t.get(i),o=a?n.get(i)??n.set(i,r(a.layers)).get(i)??{span:1,stack:1}:{span:1,stack:1};e=Math.max(e,o.span),s+=o.stack}i+=e,a=Math.max(a,s)}return{span:i,stack:a}};return r(e.layers)}var Ua={across:{gap:56,boxGap:40,sep:16,pointSep:12,pad:12,padEnd:24,margin:16},down:{gap:40,boxGap:32,sep:16,pointSep:12,pad:10,padEnd:24,margin:16}};function Wa(e,t,n){let r=[0];for(let n=1;n<e.length;n++)r.push(r[n-1]+t[n-1]);let i=[];e.forEach((e,t)=>{let a=n[t]??1;for(i.push({sum:a*(e-r[t]),w:a,n:1});i.length>1;){let e=i[i.length-1],t=i[i.length-2];if(t.sum/t.w<=e.sum/e.w)break;i.splice(-2,2,{sum:t.sum+e.sum,w:t.w+e.w,n:t.n+e.n})}});let a=[];for(let e of i)for(let t=0;t<e.n;t++)a.push(e.sum/e.w+r[a.length]);return a}function Ga(e,t,n,r,i=0){if(e<=0||t<=0||n<=0)return{k:1,x:0,y:0,h:Math.max(0,t)};let a=Math.min(1,n/e),o=Math.max(i,Math.min(t*a,r)),s=Math.min(a,o/t);return{k:s,x:(n-e*s)/2,y:(o-t*s)/2,h:o}}var Ka=(e,t=200)=>e.marks.filter(e=>e!==null).length+e.loose.length>t,qa=(e,t,n)=>n<t?t:Math.min(n,Math.max(t,e));function Ja(e,t,n,r=e){let i=function(e,t){let n=Math.max(e.left,t.left),r=Math.max(e.top,t.top),i=Math.min(e.left+e.width,t.left+t.width),a=Math.min(e.top+e.height,t.top+t.height);return i>n&&a>r?{left:n,top:r,width:i-n,height:a-r}:null}(r,t);if(!i)return{shown:!1,x:0,y:0,side:`right`,arrow:0,fits:!1};let{width:a,height:o}=n,s=t.left+8,c=t.top+8,l=t.left+t.width-8,u=t.top+t.height-8,d=e.left+e.width,f=e.top+e.height,p=i.top+i.height/2,m=i.left+i.width/2,h=qa(p-o/2,c,u-o),g=qa(m-a/2,s,l-a),_={right:l-(d+12)-a,left:e.left-12-a-s,below:u-(f+12)-o,above:e.top-12-o-c},v=[`right`,`left`,`below`,`above`],y=v.find(e=>_[e]>=0)??v.reduce((e,t)=>_[t]>_[e]?t:e),b,x;switch(y){case`right`:[b,x]=[qa(d+12,s,l-a),h];break;case`left`:[b,x]=[qa(e.left-12-a,s,l-a),h];break;case`below`:[b,x]=[g,qa(f+12,c,u-o)];break;case`above`:[b,x]=[g,qa(e.top-12-o,c,u-o)]}return{shown:!0,x:b,y:x,side:y,arrow:y===`right`||y===`left`?qa(p-x,14,o-14):qa(m-b,14,a-14),fits:_[y]>=0}}var Ya=class{constructor(e,t){this.host=e,this.o=t,this.view={k:1,x:0,y:0},this.frameH=0,this.fitK=1,this.moved=!1,this.pressed=!1,this.pan=null,this.swallowClick=!1,this.onPointerDown=e=>{this.pressed=!0,globalThis.addEventListener(`pointerup`,()=>this.pressed=!1,{once:!0}),e.button!==0||e.target.closest(`.tools`)||this.o.down()&&e.pointerType!==`mouse`||(this.pan={id:e.pointerId,px:e.clientX,py:e.clientY,x:this.view.x,y:this.view.y,far:!1})},this.onPointerMove=e=>{let t=this.pan;if(!t||t.id!==e.pointerId)return;let n=e.clientX-t.px,r=e.clientY-t.py;!t.far&&Math.hypot(n,r)<4||(t.far||(t.far=!0,e.currentTarget.setPointerCapture(e.pointerId),e.currentTarget.classList.add(`drag`)),this.setMoved(),this.setView({...this.view,x:t.x+n,y:t.y+r}))},this.onPointerUp=e=>{let t=this.pan;t&&t.id===e.pointerId&&(this.pan=null,e.currentTarget.classList.remove(`drag`),t.far&&(this.swallowClick=!0))},this.onWheel=e=>{if(!this.o.wheel()||!e.ctrlKey&&!e.metaKey)return;let t=this.o.frame();if(!t)return;e.preventDefault();let n=t.getBoundingClientRect();this.zoomBy(Math.exp(.0015*-e.deltaY),e.clientX-n.left,e.clientY-n.top)},this.onClickCapture=e=>{this.swallowClick&&(this.swallowClick=!1,e.stopPropagation(),e.preventDefault())},e.addController(this)}hostConnected(){this.host.addEventListener(`wheel`,this.onWheel,{passive:!1}),this.host.addEventListener(`click`,this.onClickCapture,{capture:!0})}hostDisconnected(){this.host.removeEventListener(`wheel`,this.onWheel),this.host.removeEventListener(`click`,this.onClickCapture,{capture:!0}),this.resize?.disconnect(),this.resize=void 0}hostUpdated(){this.resize||(this.resize=new ResizeObserver(()=>this.o.onResize()),this.resize.observe(this.host))}get transform(){return(e=>`translate(${e.x}px,${e.y}px) scale(${e.k})`)(this.view)}reset(){this.moved=!1}fit(){let e=this.o.drawing();if(!e)return;let t=this.o.frame(),n=t?.clientWidth||this.host.clientWidth,r=Ga(e.w,e.h,n,e.down?1/0:Math.max(360,.7*globalThis.innerHeight)),i=t?.clientHeight??0,a=`${i}px`===(t?.style.height??`0px`)?r:Ga(e.w,e.h,n,i,i);a.k!==this.fitK&&(this.fitK=a.k,this.host.requestUpdate());let o=e.down?r.h:Math.max(r.h,e.room);this.moved?o>this.frameH&&this.setHeight(o):(this.setHeight(o),a.k===this.view.k&&a.x===this.view.x&&a.y===this.view.y||this.setView({k:a.k,x:a.x,y:a.y}))}showAll(){this.moved=!1,this.fit(),this.host.requestUpdate()}zoomBy(e,t=(this.o.frame()?.clientWidth??this.host.clientWidth)/2,n=(this.o.frame()?.clientHeight??this.frameH)/2){this.setMoved(),this.setView(function(e,t,n,r,i){let a=Math.min(2.5,Math.max(i,e.k*t)),o=a/e.k;return{k:a,x:n-(n-e.x)*o,y:r-(r-e.y)*o}}(this.view,e,t,n,Math.min(1,this.fitK)/2))}reveal(e){let t=this.o.frame();if(!t)return;let n=t.getBoundingClientRect(),r=e.getBoundingClientRect(),i=0,a=0;r.left<n.left+24?i=n.left+24-r.left:r.right>n.right-24&&(i=n.right-24-r.right),r.top<n.top+24?a=n.top+24-r.top:r.bottom>n.bottom-24&&(a=n.bottom-24-r.bottom),(i||a)&&(this.setMoved(),this.setView({...this.view,x:this.view.x+i,y:this.view.y+a}))}setMoved(){this.moved||(this.moved=!0,this.host.requestUpdate())}setHeight(e){e!==this.frameH&&(this.frameH=e,this.host.requestUpdate())}setView(e){this.view=e;let t=this.o.stage();t&&(t.style.transform=this.transform),this.o.onMove()}},Xa=class{constructor(e,t){this.host=e,this.o=t,this.room=0,this.quiet=!1,this.onCardKey=e=>{if(e.key===`Tab`&&e.shiftKey&&e.target===this.actions()[0]){let t=this.itemFocus();if(!t)return;e.preventDefault(),this.focusQuietly(t)}else e.key===`Escape`&&this.focusQuietly(this.itemFocus())},this.onTabToCard=e=>{if(e.key!==`Tab`||e.shiftKey||e.defaultPrevented)return;let t=this.itemFocus();if(!t||this.focused!==t)return;let n=this.actions()[0];n&&(e.preventDefault(),n.focus())},e.addController(this)}hostConnected(){this.host.addEventListener(`keydown`,this.onTabToCard)}hostDisconnected(){this.host.removeEventListener(`keydown`,this.onTabToCard)}get root(){return this.host.shadowRoot??this.host}get focused(){return function(e){let t=e?.activeElement??null;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t}(this.host.shadowRoot)}card(){return this.root.querySelector(`.insp`)}content(){return this.card()?.querySelector(`slot`)?.assignedElements({flatten:!0})??[]}actions(){return this.content().flatMap(e=>[...e.matches(`button, a[href]`)?[e]:[],...e.querySelectorAll(`button, a[href]`)])}anchor(){let e=this.root.querySelector(`.main > .frame`),t=e?.querySelector(`tr.sel > th`);if(e&&t)return{item:t,clear:t,frame:e};let n=e?.querySelector(`.mark.sel, .taskchip.sel, .node.sel, .cluster.sel`)??this.o.inner()?.querySelector(`.mark.sel`);if(!e||!n)return null;let r=n.classList.contains(`cluster`)?n.querySelector(`:scope > .hd`)??n:n;return{item:r,clear:r.closest(`.node`)??n,frame:e}}place(){let e=this.card(),t=this.o.docked(),n=e&&!t?e.querySelector(`.scroll`).scrollHeight+24+16:0;if(n!==this.room&&(n>this.o.frameH()||this.room>0)&&(this.room=n,this.o.grow()),!e||t)return;let r=this.anchor(),i=this.root.querySelector(`.main`);if(!r||!i)return void e.classList.remove(`placed`);let a=i.getBoundingClientRect(),o=e=>({left:e.left-a.left,top:e.top-a.top,width:e.width,height:e.height}),s=o(r.item.getBoundingClientRect()),c=o(r.clear.getBoundingClientRect()),l=o(r.frame.getBoundingClientRect()),u=r.frame.querySelector(`.mx`)??this.o.inner()?.querySelector(`.mx`),d=Ja(s,u?o(u.getBoundingClientRect()):l,{width:0,height:0}).shown,f=e.querySelector(`.scroll`);f&&(f.style.maxHeight=`${Math.max(120,l.height-16-24)}px`);let p={width:e.offsetWidth,height:e.offsetHeight},m=Ja(c,l,p,s);m.fits||r.clear===r.item||r.clear.classList.contains(`node`)||(m=Ja(s,l,p)),e.classList.toggle(`placed`,m.shown&&d),e.dataset.side=m.side,e.style.left=`${m.x}px`,e.style.top=`${m.y}px`,e.style.setProperty(`--arrow`,`${m.arrow}px`)}itemFocus(){let e=this.anchor();return e?e.item.matches(`button`)?e.item:e.item.querySelector(`.name`):null}describe(){let e=[this.root,this.o.inner()].filter(e=>!!e);for(let t of e)for(let e of t.querySelectorAll(`[aria-describedby="insp"]`))e.removeAttribute(`aria-describedby`);let t=this.itemFocus(),n=this.card();t&&n&&(t.getRootNode()===n.getRootNode()?t.setAttribute(`aria-describedby`,`insp`):`ariaDescribedByElements`in t&&(t.ariaDescribedByElements=[n]));let r=this.content(),i=e=>r.map(t=>t.matches(e)?t:t.querySelector(e)).find(Boolean)??null;return[i(`h1, h2, h3, h4, h5, h6`)?.textContent?.trim()??``,i(`[data-status]`)?.textContent?.trim()??``]}focusQuietly(e){this.quiet=!0,e?.focus(),this.quiet=!1}whenReleased(e){if(!this.o.pressed())return e();globalThis.addEventListener(`pointerup`,()=>setTimeout(e),{once:!0})}revealOverSheet(){let e=this.anchor()?.item;if(!e)return;let t=e.getBoundingClientRect(),n=this.card()?.getBoundingClientRect(),r=Math.min(globalThis.innerHeight,n?.top??1/0);(t.top<0||t.bottom>r)&&e.scrollIntoView({block:`center`})}},Za=(e=14)=>k`<svg class="ic loop-ic" width=${e} height=${e} viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
159
|
+
<path d="M12.7,9.71 A5,5 0 1 1 11.21,4.17" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"></path>
|
|
160
|
+
<path d="M12.44,5.2 L9.15,5.06 L11.73,2 z" fill="currentColor"></path>
|
|
161
|
+
</svg>`,Qa=()=>k`<svg class="ic in-ic" width="12" height="12" viewBox="0 0 12 12" aria-hidden="true" focusable="false">
|
|
162
|
+
<rect x="3.4" y="0.7" width="7.9" height="7.9" rx="1.6" fill="none" stroke="currentColor" stroke-width="1.2"></rect>
|
|
163
|
+
<path d="M0.7,3.6 V9.7 Q0.7,11.3 2.3,11.3 H8.4" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"></path>
|
|
164
|
+
</svg>`,$a={graph:`Graph`,table:`Table`,view:`View`,zoomIn:`Zoom in`,zoomInTip:`Zoom in (Ctrl + scroll)`,zoomOut:`Zoom out`,zoomOutTip:`Zoom out (Ctrl + scroll)`,showAll:`Show all`,graphKeys:[`Tab: next node`,`Arrow keys: marks`,`Shift + arrow keys: earlier and later nodes`,`Enter: open`],tableKeys:[`Tab: next row`,`Enter: open`],matrixKeys:[`Arrow keys: marks`,`Enter: open`],clearKey:`Esc: clear selection`,upKey:``,inspector:`Selected item`,stubTip:`Outside this graph`,more:e=>`+${e}`,progress:(e,t)=>`${e} of ${t} done`,badge:`count`,solidEdge:`link`,dashedEdge:`other link`,cycle:`next round`,drill:`has an inner view`,open:`Show inside`,close:`Hide inside`,iconNames:{},nameHeader:`Name`,statusHeader:`Status`,solidHeader:`Earlier`,dashedHeader:`Dashed link from`,laterHeader:`Later`,none:`none`,inCluster:e=>`${e} in the cluster`,list:e=>new Intl.ListFormat(`en`,{type:`conjunction`}).format(e)},eo=O` :host{display:block;container-type:inline-size;}.col,.main{display:flex;flex-direction:column;}.col{height:100%;}.main{flex:auto;min-height:0;}.frame{flex:auto;position:relative;overflow:hidden;border-radius:8px;background:var(--well);box-sizing:border-box;}.gframe{cursor:grab;touch-action:none;}.gframe.drag{cursor:grabbing;}.stage{position:absolute;left:0;top:0;transform-origin:0 0;}.gframe.down{touch-action:pan-y pinch-zoom;}.view{animation:view-in 0.1s var(--ease) both;}@keyframes view-in{from{opacity:0;}}@media (prefers-reduced-motion:reduce){.view{animation:none;}}.tools{display:flex;align-items:center;gap:4px;justify-self:end;}.tools button{all:unset;cursor:pointer;min-width:22px;height:22px;padding:0 7px;box-sizing:border-box;text-align:center;font-size:11.5px;line-height:22px;color:var(--text-2);border-radius:6px;border:1px solid var(--line);}.tools button:hover:not(:disabled){color:var(--text);border-color:var(--line2);}.tools button:focus-visible,.loopchip:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:1px;}.tools button:disabled{cursor:default;opacity:0.4;}.views{margin-left:6px;}.dag{position:relative;}.dag.unplaced{visibility:hidden;}.dag>*,.cluster>.in>*{position:absolute;}.edges{left:0;top:0;pointer-events:none;overflow:visible;z-index:0;}.edges path{fill:none;stroke:var(--line2);stroke-width:1.5;}.edges path.dashed{stroke-dasharray:5 4;}.edges path.ret,.legend svg path.ret{stroke:var(--text-2);stroke-width:2;stroke-dasharray:0.1 4;stroke-linecap:round;opacity:0.8;}.edges path.ret-tip,.legend svg path.ret-head{fill:var(--text-2);stroke:none;opacity:0.8;}.ic{display:block;flex:none;}.loop-ic{color:var(--text-2);}.in-ic{color:var(--text-muted);}.stub{z-index:1;font-family:var(--mono);font-size:11.5px;color:var(--text-muted);padding:3px 9px;border-radius:999px;border:1px solid var(--line);background:var(--card);white-space:nowrap;}.cluster{z-index:1;box-sizing:border-box;border-radius:14px;border:1px solid var(--line2);background:color-mix(in srgb,var(--text-muted) 5%,transparent);}.cluster .cluster{background:color-mix(in srgb,var(--text-muted) 6%,transparent);}.cluster>.in{position:absolute;inset:0;pointer-events:none;}.cluster>.in>*{pointer-events:auto;}.cluster>.hd{position:absolute;left:11px;top:6px;display:flex;flex-direction:column;align-items:flex-start;gap:1px;white-space:nowrap;padding-right:22px;cursor:pointer;}.cluster>.hd .line{display:flex;align-items:center;gap:8px;}.cluster>.hd .name{display:inline-flex;align-items:center;gap:5px;}.cluster.sel{outline:var(--focus-width) solid var(--accent);outline-offset:2px;}.cluster>.hd .spread{font-size:11px;color:var(--text-2);font-variant-numeric:tabular-nums;}.node{z-index:1;width:max-content;min-width:120px;box-sizing:border-box;display:flex;flex-direction:column;gap:7px;padding:8px 10px 9px;border-radius:10px;border:1px solid var(--line);background:var(--card);transition:border-color 0.3s,box-shadow 0.3s;cursor:pointer;box-shadow:var(--ex,0 0 0 0 transparent);}.node.accent{--ex:inset 3px 0 0 -1px color-mix(in srgb,var(--agent) 60%,transparent);}.node .nm{display:flex;align-items:center;min-width:0;gap:0;}.node .right{display:flex;align-items:center;gap:8px;}.node .right>.tog{margin-inline-end:0;}.cue{display:block;line-height:0;}.cluster>.cue{position:absolute;top:9px;right:10px;padding:2px;margin:-2px;}.tog{all:unset;cursor:pointer;display:inline-flex;line-height:0;padding:2px;margin:-2px;border-radius:4px;color:var(--text-2);}.tog:hover{color:var(--text);background:var(--raise);}.tog:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:1px;}.cluster>.hd .psep{color:var(--text-muted);font-size:11px;}.cluster>.hd .part{all:unset;cursor:pointer;font-family:var(--mono);font-weight:600;font-size:12.5px;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px;}.cluster>.hd .part:hover{color:var(--text);text-decoration:underline;}.cluster>.hd .part:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:2px;border-radius:3px;}.node.sel{outline:var(--focus-width) solid var(--accent);outline-offset:2px;}.node.drill{box-shadow:4px 4px 0 -1px var(--card),4px 4px 0 0 var(--line2);}.node[data-look='running']{border-color:var(--status-running);}.node.drill[data-look='running']{box-shadow:4px 4px 0 -1px var(--card),4px 4px 0 0 var(--status-running),0 0 14px var(--status-running-bg);}.node:not(.drill)[data-look='running']{box-shadow:var(--ex,0 0 0 0 transparent),0 0 14px var(--status-running-bg);}.node[data-look='failed']{border-color:color-mix(in srgb,var(--status-failed) 55%,transparent);}.node:focus-within{border-color:var(--text-2);}.hd{display:flex;align-items:center;justify-content:space-between;gap:12px;}.name{all:unset;cursor:pointer;font-family:var(--mono);font-weight:600;font-size:12.5px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px;}.name:hover{text-decoration:underline;}.name:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:2px;border-radius:3px;}.count{font-size:11px;color:var(--text-muted);font-variant-numeric:tabular-nums;white-space:nowrap;}.ex{display:flex;flex-wrap:wrap;gap:0 10px;font-size:11px;line-height:1.5;contain:inline-size;}:is(.ex,.st) .err{color:var(--status-failed);}:is(.ex,.st) .warn{color:var(--status-attention);}:is(.ex,.st) .live{color:var(--status-running);}:is(.ex,.st) .mut{color:var(--text-muted);}.marks{display:grid;grid-template-columns:repeat(var(--cols),var(--m));gap:var(--g);}.slot{width:var(--m);height:var(--m);}.taskchip.sel{outline:var(--focus-width) solid var(--accent);outline-offset:1px;}.hl .mark:not(.on){opacity:0.16;}.hl .mark.on{transform:scale(1.2);}@media (prefers-reduced-motion:reduce){.node{transition:none;}}.sbar{display:flex;width:220px;height:10px;border-radius:3px;overflow:hidden;background:var(--track);gap:1px;}.sbar i{display:block;min-width:2px;height:100%;background:var(--tone,var(--line2));}.sbar i:not([data-tone]){--tone:initial;}.sbar i[data-tone='done']{opacity:0.85;}.sbar i[data-tone='muted']{opacity:0.5;}.sbar i[data-shape='hatched']{background:repeating-linear-gradient(135deg,var(--tone-bg) 0 2px,color-mix(in srgb,var(--tone) 60%,transparent) 2px 3px);}.sbar i[data-shape='half']{background:linear-gradient(0deg,var(--tone) 50%,var(--tone-bg) 50%);}.fails{display:flex;flex-wrap:wrap;align-items:center;gap:4px;max-width:220px;font-size:11px;color:var(--text-muted);}.fails .taskchip{color:var(--status-failed);border-color:color-mix(in srgb,var(--status-failed) 45%,transparent);}.fails .taskchip:focus-visible{outline:var(--focus-width) solid var(--text);outline-offset:1px;}.hl .fails .taskchip:not(.on){opacity:0.4;}.mxframe{display:grid;grid-template-columns:minmax(0,1fr);place-items:center;padding:14px 16px;}.foot{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:6px 14px;margin-top:6px;}.legend{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:11px;color:var(--text-muted);}.legend span{display:inline-flex;align-items:center;gap:6px;}.legend .mark{--m:12px;cursor:default;animation:none;}.legend .mark:hover{transform:none;outline:none;}.legend i.mark{border-radius:3px;}.legend i.mark:is([data-shape='square'],[data-shape='hatched']){border-radius:2px;}.legend i.mark[data-shape='hatched']{background:repeating-linear-gradient(135deg,transparent 0 2px,color-mix(in srgb,var(--tone) 55%,transparent) 2px 3px);}.legend i.mark[data-shape='half']{border-radius:50%;}.legend svg path{stroke:var(--line2);stroke-width:1.5;fill:none;}.main{position:relative;min-width:0;}.sep{color:var(--text-muted);}.insp{position:absolute;left:0;top:0;z-index:6;width:272px;max-width:calc(100% - 16px);box-sizing:border-box;display:flex;flex-direction:column;gap:9px;padding:10px 12px 12px;border-radius:10px;border:1px solid var(--accent);background:var(--card);font-size:12px;overflow:visible;box-shadow:0 12px 32px color-mix(in srgb,var(--shadow) 55%,transparent);visibility:hidden;animation:insp-in 0.12s var(--ease) both;}.insp.placed{visibility:visible;}.insp .scroll{display:flex;flex-direction:column;gap:9px;min-height:0;overflow:auto;}.insp .ptr{position:absolute;width:10px;height:10px;background:var(--card);border:1px solid var(--accent);transform:rotate(45deg);}.insp[data-side='right'] .ptr{left:-6px;top:calc(var(--arrow) - 5px);border-top:0;border-right:0;}.insp[data-side='left'] .ptr{right:-6px;top:calc(var(--arrow) - 5px);border-bottom:0;border-left:0;}.insp[data-side='below'] .ptr{top:-6px;left:calc(var(--arrow) - 5px);border-bottom:0;border-right:0;}.insp[data-side='above'] .ptr{bottom:-6px;left:calc(var(--arrow) - 5px);border-top:0;border-left:0;}.insp.sheet{position:sticky;bottom:8px;width:auto;max-width:none;margin-top:8px;visibility:visible;}.insp.sheet .ptr{display:none;}@keyframes insp-in{from{opacity:0;transform:scale(0.96);}to{opacity:1;transform:none;}}.keys{grid-column:1 / -1;font-size:11px;color:var(--text-muted);visibility:hidden;}.keys span{white-space:nowrap;}:host(:focus-within) .keys{visibility:visible;}@container (max-width:560px){.foot{grid-template-columns:minmax(0,1fr);}.tools{grid-row:1;justify-self:start;flex-wrap:wrap;}.keys span{white-space:normal;}}@media not (any-pointer:fine){.keys{display:none;}}.tframe{overflow:auto;padding:0 12px 10px;background:linear-gradient(transparent,var(--well) 70%) center bottom / 100% 28px no-repeat local,radial-gradient(farthest-side at 50% 100%,color-mix(in srgb,var(--text-muted) 30%,transparent),transparent) center bottom / 100% 12px no-repeat scroll,var(--well);}table.list{width:100%;border-collapse:separate;border-spacing:0;font-size:12px;font-variant-numeric:tabular-nums;}.list th,.list td{text-align:left;vertical-align:middle;padding:6px 10px;border-bottom:1px solid var(--line);}.list .fit{width:1%;white-space:nowrap;}.list thead th{position:sticky;top:0;z-index:2;background:var(--well);color:var(--text-muted);font-weight:500;font-size:11px;white-space:nowrap;padding-top:10px;}.list tbody th{font-weight:600;}.list td{color:var(--text-2);}.list .rel>span{display:block;min-width:14ch;}.list tbody tr{cursor:pointer;}.list tbody tr:hover>*{background-color:color-mix(in srgb,var(--text-muted) 8%,transparent);}.list tbody tr.sel>*{background-color:var(--accent-bg);}.list tbody tr.sel>th{box-shadow:inset 2px 0 0 var(--accent);}.list .nm{display:inline-flex;align-items:center;gap:8px;vertical-align:middle;}.list .nm .in-ic{margin-right:-2px;}.list .name{max-width:32ch;}.loopchip{display:inline-flex;align-items:center;gap:4px;font-family:var(--sans);font-weight:400;}.loopchip .ic{color:var(--text-muted);}.list .st .n{color:var(--text);}`,to=ei(class extends ti{constructor(){super(...arguments),this.key=j}render(e,t){return this.key=e,t}update(e,[t,n]){return t!==this.key&&(Ci(e),this.key=t),n}}),no=(e,t)=>[...e.marks.map((e,n)=>e?{m:e,series:t[n]??``}:null),...e.loose.map(e=>({m:e,series:``}))];function ro(e,t){let n=e.marks.length+e.loose.length,r=function(e){return e<=12?{cols:Math.max(1,e),size:12}:e<=100?{cols:10,size:10}:{cols:20,size:6}}(e.marks.length?t:n);return{cols:Math.min(r.cols,Math.max(1,n)),size:r.size,gap:r.size>=10?4:2}}function io(e){return Math.max(0,e.findIndex(e=>e!==null))}var ao={failed:`err`,attention:`warn`,running:`live`,muted:`mut`};function oo(e,t,n){let r=e.lay?.at[t];if(!r)return`left:0;top:0`;let i=n?n.x+1:0,a=n?n.y+1:0;return`left:${r.x-i}px;top:${r.y-a}px`}function so(e,t,n){t.target.closest(`.mark, .taskchip, .node, .cluster`)===t.currentTarget&&(t.stopPropagation(),t.detail>=2||e.select(n))}function co(e,t,n){t.target.closest(`.mark, .taskchip, .node, .cluster`)===t.currentTarget&&(t.stopPropagation(),e.act(n))}function lo(e,t,n){t.key===`Enter`&&(t.preventDefault(),e.act(n))}function uo(e,t,n,r){let i=r?e.words.close:e.words.open;return k`<button type="button" class="tog" part="toggle" aria-expanded=${r} aria-label=${`${i}: ${n}`} title=${i} @click=${n=>{n.stopPropagation(),e.toggle(t,!r)}} @dblclick=${e=>e.stopPropagation()}>${(e=>k`<svg class="ic tog-ic" width="12" height="12" viewBox="0 0 12 12" aria-hidden="true" focusable="false">
|
|
165
|
+
<rect x="0.7" y="0.7" width="10.6" height="10.6" rx="2.2" fill="none" stroke="currentColor" stroke-width="1.2"></rect>
|
|
166
|
+
<path d=${e?`M3.5,6 H8.5`:`M3.5,6 H8.5 M6,3.5 V8.5`} fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"></path>
|
|
167
|
+
</svg>`)(r)}</button>`}var fo=(e,t=`span`)=>(e.notes??[]).map(e=>t===`span`?k`<span class=${ao[e.tone??`neutral`]??``}>${e.text}</span>`:k`<div class=${ao[e.tone??`neutral`]??``}>${e.text}</div>`);function po(e,t,n,r,i,a=!1){let{m:o}=n,{key:s,on:c}=e.lit(),l=(e=>e.series||e.m.id)(n),u=c!==null&&(n.series!==``&&n.series===s||c.has(o.id)),d=e.selected===o.id?`sel`:``,f=n=>{e.hover=l,e.active.set(t.id,r),e.pz.reveal(n.currentTarget),e.focusSelect(o.id)};if(a)return k`<button type="button" class="taskchip ${u?`on`:``} ${d}" part="mark" data-i=${r} tabindex=${i?0:-1} title=${o.tip??j} aria-label=${o.label} aria-pressed=${!!d} @mouseenter=${()=>e.hover=l} @focus=${f} @blur=${()=>e.hover=null} @click=${()=>e.select(o.id)} @dblclick=${()=>e.act(o.id)}>${o.name??(n.series||o.id)}</button>`;let p=e.states[o.state];return k`<button type="button" class="mark ${u?`on`:``} ${d}" part="mark" data-tone=${I(p?.tone)} data-shape=${p?.shape??j} data-i=${r} data-n=${o.badge??j} tabindex=${i?0:-1} title=${o.tip??j} aria-label=${o.label} aria-pressed=${!!d} @mouseenter=${()=>e.hover=l} @focus=${f} @blur=${()=>e.hover=null} @click=${()=>e.select(o.id)} @dblclick=${()=>e.act(o.id)}></button>`}function mo(e,t,n){let r=t.target;if(!r.classList.contains(`mark`)&&!r.classList.contains(`taskchip`))return;if(t.shiftKey&&t.key.startsWith(`Arrow`))return function(e,t,n){let r=t.key===`ArrowRight`||t.key===`ArrowDown`?`later`:`earlier`,i=e.lay,a=function(e,t,n,r){let i=new Map(e.drawn.map((e,t)=>[e,t])),a=[...new Set(e.edges.filter((r,i)=>!e.back[i]&&(n===`later`?r.from===t:r.to===t)).map(e=>n===`later`?e.to:e.from))],o=r(t);return a.sort((e,t)=>Math.abs(r(e)-o)-Math.abs(r(t)-o)||(i.get(e)??0)-(i.get(t)??0)),a[0]??null}({drawn:e.arr.drawn,edges:e.drawn.edges,back:e.arr.back},n.id,r,e=>{let t=i?.at[e];return t?i?.down?t.x+t.w/2:t.y+t.h/2:0});if(t.preventDefault(),!a)return;let o=e.nodes.get(a);if(!o)return;let s=n.slots[e.active.get(n.id)??io(n.slots)]?.series??``,c=no(o,e.drawn.series),l=Ka(o,e.barAt)?c.filter(t=>!!t&&e.states[t.m.state]?.tone===`failed`):c,u=s?l.findIndex(e=>e?.series===s):-1,d=u>=0?u:e.active.get(o.id)??io(l);e.active.set(o.id,d),e.requestUpdate(),e.updateComplete.then(()=>{let t=e.renderRoot.querySelector(`.node[data-id="${CSS.escape(a)}"]`);(t?.querySelector(`[data-i="${d}"]`)??t?.querySelector(`.name`))?.focus()})}(e,t,n);let{slots:i}=n;if(t.key===`Enter`){let n=i[Number(r.dataset.i)];t.preventDefault(),n&&e.act(n.m.id);return}let a=e.active.get(n.id)??io(i),o={ArrowRight:1,ArrowLeft:-1,ArrowDown:n.grid.cols,ArrowUp:-n.grid.cols},s;if(t.key===`Home`)s=io(i);else if(t.key===`End`)s=i.length-1-[...i].reverse().findIndex(e=>e!==null);else{if(o[t.key]===void 0)return;{let e=o[t.key];for(s=a+e;s>=0&&s<i.length&&!i[s];)s+=Math.sign(e);if(s<0||s>=i.length)return}}t.preventDefault(),e.active.set(n.id,s),e.requestUpdate();let c=t.currentTarget;e.updateComplete.then(()=>c.querySelector(`[data-i="${s}"]`)?.focus())}var ho=(e,t,n)=>{let r=e.states[t];return k`<i class="mark" data-tone=${I(r?.tone)} data-shape=${r?.shape??j} data-n=${n??j}></i>`},go={series:[],nodes:[],clusters:[],edges:[],stubs:[]},_o=class extends M{constructor(...e){super(...e),this.graph=go,this.states={},this.selected=null,this.highlight=null,this.order=void 0,this.key=``,this.direction=`auto`,this.view=`graph`,this.matrix=null,this.barAt=200,this.related=void 0,this.strings={},this.matrixStrings={},this.renderIcon=e=>pi(e),this.iconStyles=[],this.hover=null,this.down=!1,this.lay=null,this.announced=``,this.arr=Va(go),this.words=$a,this.drawn={...go,nodes:[]},this.nodes=new Map,this.clusters=new Map,this.markSeries=new Map,this.active=new Map,this.measured=null,this.layKey=``,this.layFor=null,this.litCache=null,this.scrolled=null,this.pz=new Ya(this,{frame:()=>this.renderRoot.querySelector(`.frame`),stage:()=>this.renderRoot.querySelector(`.stage`),drawing:()=>this.lay&&!this.matrix?{w:this.lay.w,h:this.lay.h,down:this.down,room:this.card.room}:null,wheel:()=>this.view!==`table`&&!this.matrix,down:()=>this.down,onMove:()=>this.card.place(),onResize:()=>{this.fit(),this.card.place()}}),this.card=new Xa(this,{docked:()=>this.down,frameH:()=>this.pz.frameH,grow:()=>this.matrix?this.requestUpdate():this.fit(),pressed:()=>this.pz.pressed,inner:()=>this.matrixEl()?.renderRoot??null}),this.h=this,this.onEscape=e=>{e.key===`Escape`&&!e.defaultPrevented&&this.selected&&(e.preventDefault(),this.select(null))}}static{this.styles=[V,Jr,oi,eo]}static{this.properties={graph:{attribute:!1},states:{attribute:!1},selected:{attribute:!1},highlight:{attribute:!1},order:{attribute:!1},key:{},direction:{},view:{},matrix:{attribute:!1},barAt:{type:Number},related:{attribute:!1},strings:{attribute:!1},matrixStrings:{attribute:!1},renderIcon:{attribute:!1},iconStyles:{attribute:!1},hover:{state:!0},down:{state:!0},lay:{state:!0},announced:{state:!0}}}matrixEl(){return this.renderRoot.querySelector(`cae-mark-matrix`)}willUpdate(e){if(e.has(`key`)&&e.get(`key`)!==void 0&&(this.pz.reset(),this.active.clear()),e.has(`strings`)&&(this.words=jr($a,this.strings)),e.has(`direction`)&&this.direction!==`auto`&&(this.down=this.direction===`down`),(e.has(`graph`)||e.has(`order`)||e.has(`down`)||e.has(`direction`))&&(this.arr=Va(this.graph,this.order,this.down),this.clusters=new Map(this.graph.clusters.map(e=>[e.id,e]))),e.has(`graph`)||e.has(`states`)||e.has(`strings`)){let e=this.graph;this.drawn={...e,nodes:e.nodes.map(e=>function(e,t,n){let{marks:r=[],loose:i=[]}=e,a={},o=0,s=0;for(let e of[...r,...i])e&&(a[e.state]=(a[e.state]??0)+1,s++,t[e.state]?.tone===`done`&&o++);return{...e,marks:r,loose:i,counts:e.counts??a,progress:e.progress??{done:o,total:s,label:n(o,s)}}}(e,this.states,this.words.progress))},this.nodes=new Map(this.drawn.nodes.map(e=>[e.id,e])),this.markSeries=new Map(this.drawn.nodes.flatMap(t=>no(t,e.series).flatMap(e=>e?[[e.m.id,e.series]]:[])))}}connectedCallback(){super.connectedCallback(),this.addEventListener(`keydown`,this.onEscape)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`keydown`,this.onEscape)}updated(e){e.has(`iconStyles`)&&this.renderRoot instanceof ShadowRoot&&mt(this.renderRoot,[...this.constructor.elementStyles,...this.iconStyles]);let t=this.matrixEl();t&&t!==this.scrolled&&(this.scrolled=t,t.renderRoot.addEventListener(`scroll`,()=>this.card.place(),{capture:!0})),this.place(),this.card.place(),e.has(`selected`)&&this.selectionChanged()}focusToggle(e,t=4){let n=this.renderRoot;if(n.querySelector(`.dag.unplaced`)&&t>0)return void this.updateComplete.then(()=>requestAnimationFrame(()=>this.focusToggle(e,t-1)));let r=this.clusters.has(e)?`.cluster[data-cluster="${CSS.escape(e)}"] > .cue .tog`:`.node[data-id="${CSS.escape(e)}"] .tog`,i=n.querySelector(r);i?this.card.focusQuietly(i):this.focusItem(e)}focusItem(e){let t=this.renderRoot,n=null;e&&this.clusters.has(e)?n=t.querySelector(`.cluster[data-cluster="${CSS.escape(e)}"] > .hd .name`):e&&(n=t.querySelector(`.node[data-id="${CSS.escape(e)}"] [tabindex="0"]`));let r=t.querySelector(`slot[name="crumbs"]`)?.assignedElements({flatten:!0})??[];this.card.focusQuietly(n??r.map(e=>e.matches(`button`)?e:e.querySelector(`button`)).find(Boolean)??t.querySelector(`.mark[tabindex="0"], .node .name`)??this.matrixEl()?.renderRoot.querySelector(`.mark[tabindex="0"]`)??null)}selectionChanged(){let[e,t]=this.card.describe(),n=e?[e,t].filter(Boolean).join(` | `):``;n!==this.announced&&(this.announced=n),this.down&&this.card.whenReleased(()=>this.card.revealOverSheet())}place(){let e=this.renderRoot.querySelector(`.dag`);if(!e)return;let t=this.graph,n=`${this.down}|${this.clientWidth}`;if(this.measured?.graph===t&&this.measured.key===n)return this.fit();this.measured={graph:t,key:n};let r=new Map;for(let t of e.querySelectorAll(`[data-id]`))r.set(t.dataset.id??``,{w:t.offsetWidth,h:t.offsetHeight});let i=this.arr,a=JSON.stringify([this.key,i.slots,i.edgePaths.map(e=>e.steps.map(e=>e.id)),this.down,[...r]]);if(a===this.layKey)return this.fit();this.layKey=a,this.layFor=this.key,this.lay=function(e,t,n=!1){let r=Ua[n?`down`:`across`],i=e=>n?e.h:e.w,a=e=>n?e.w:e.h,o=new Set(e.clusters.map(e=>e.id)),s=new Map(e.clusters.map(e=>[e.id,e.parent])),c=e=>t.get(`lbl:${e}`)??{w:0,h:0},l=e=>n?{u0:c(e).h+r.pad+r.gap/2,u1:r.pad,v0:r.pad,v1:r.padEnd,minU:0,minV:c(e).w+2*r.pad}:{u0:r.pad,u1:r.pad,v0:c(e).h+r.pad,v1:r.padEnd,minU:c(e).w+2*r.pad,minV:0},u=new Map,d=e=>{if(o.has(e))return u.get(e)??{u:0,v:0};if(W(e))return{u:0,v:0};let n=t.get(e)??{w:0,h:0};return{u:i(n),v:a(n)}},f=new Map,p=new Map,m=e=>e===``?0:1+m(s.get(e)??``),h=[``,...e.clusters.map(e=>e.id)].sort((e,t)=>m(t)-m(e)),g=(t,n)=>{let r=e.edgePaths[t]?.steps??[],i=r[n];if(W(i.id))return 0;if(!o.has(i.id))return d(i.id).v/2;let a=r[n-1]?.in===i.id?n-1:n+1,s=r[a];return l(i.id).v0+(f.get(i.id)?.top.get(s.id)??0)+g(t,a)};for(let t of h){let n=(e.slots[t]??[]).map(e=>[...e]);p.set(t,new Map(n.flatMap((e,t)=>e.map(e=>[e,t]))));let i=n.map(e=>Math.max(0,...e.map(e=>d(e).u))),a=t===``?r.gap:r.boxGap,s=[];i.forEach((e,t)=>s.push(t?s[t-1]+i[t-1]+a:0));let c=[];e.edgePaths.forEach((e,n)=>e.steps.forEach((r,i)=>{let a=e.steps[i-1];i&&a&&a.in===t&&r.in===t&&p.get(t)?.get(a.id)!==p.get(t)?.get(r.id)&&c.push({a:a.id,b:r.id,oa:g(n,i-1),ob:g(n,i)})}));let m=(e,t)=>t===void 0?0:o.has(e)||o.has(t)||!W(e)&&!W(t)?r.sep:r.pointSep,h=new Map;for(let e of n){let t=0;e.forEach((n,r)=>{h.set(n,t),t+=d(n).v+m(n,e[r+1])})}let _=(e,t)=>{let n=e.map(e=>{let n=t(e);return n.length?n.reduce((e,t)=>e+t,0)/n.length:h.get(e)??0}),r=e.map((t,n)=>d(t).v+m(t,e[n+1])),i=e.map((e,t)=>W(e)?-1:t).filter(e=>e>=0),a=Wa(i.map(e=>n[e]),i.map((e,t)=>t+1<i.length?((e,t)=>r.slice(e,t).reduce((e,t)=>e+t,0))(e,i[t+1]):0),i.map(()=>1));i.forEach((e,t)=>n[e]=a[t]),Wa(n,r,e.map(e=>W(e)?1:1e6)).forEach((t,n)=>h.set(e[n],Math.round(100*t)/100))},v=(e,t)=>{let n=W(e)?t:t.filter(e=>!W(e.other));return(n.length?n:t).map(e=>e.at)},y=e=>v(e,c.filter(t=>t.b===e).map(e=>({other:e.a,at:(h.get(e.a)??0)+e.oa-e.ob}))),b=e=>v(e,c.filter(t=>t.a===e).map(e=>({other:e.b,at:(h.get(e.b)??0)+e.ob-e.oa})));for(let e=0;e<8;e++){let t=n.map((e,t)=>t);e%2&&t.reverse();for(let r of t)_(n[r],e%2?b:y)}for(let e of n)_(e,e=>[...y(e),...b(e)]);let x=h.size?Math.min(...h.values()):0;for(let[e,t]of h)h.set(e,t-x);let S=(s[s.length-1]??0)+(i[i.length-1]??0),ee=Math.max(0,...n.flat().map(e=>(h.get(e)??0)+d(e).v));if(f.set(t,{rows:n,start:s,width:i,top:h,u:S,v:ee}),t!==``){let e=l(t);u.set(t,{u:Math.max(e.u0+S+e.u1,e.minU),v:Math.max(e.v0+ee+e.v1,e.minV)})}}let _={},v=new Map,y=(e,t,r)=>{v.set(e,{u:t,v:r});let i=f.get(e);i.rows.forEach((e,a)=>e.forEach(e=>{if(W(e))return;let s=t+i.start[a],c=r+(i.top.get(e)??0);if(_[e]=((e,t,r)=>n?{x:t,y:e,w:r.v,h:r.u}:{x:e,y:t,w:r.u,h:r.v})(s,c,d(e)),o.has(e)){let t=l(e);y(e,s+t.u0,c+t.v0)}}))};y(``,r.margin,r.margin);let b=f.get(``),x=b.u+2*r.margin,S=b.v+2*r.margin,ee=(e,t)=>{let n=f.get(e),r=(v.get(e)??{u:0,v:0}).u+(n.start[t]??0);return[r,r+(n.width[t]??0)]},te=(e,t)=>p.get(e)?.get(t)??0,ne=e=>e&&W(e.id)?/\|by:([^|]*)\|/.exec(e.id)?.[1]??``:``,re=e.edgePaths.map((e,t)=>{let i=n=>{let r=e.steps[n];return(v.get(r.in)??{u:0,v:0}).v+(f.get(r.in)?.top.get(r.id)??0)+g(t,n)},a=e.steps.map((t,a)=>{let o=e.steps[a-1],s=e.steps[a+1],[u,p]=ee(t.in,te(t.in,t.id)),m=i(a);if(a===0)return{a:u+d(t.id).u,b:p,at:m};if(a===e.steps.length-1)return{a:u,b:u,at:m};if(W(t.id)){let i=ne(t);if(i&&o?.id===i)return{a:ee(i,te(i,e.steps[a-2]?.id??``)+1)[0],b:p,at:m};if(i&&s?.id===i){let t=te(i,e.steps[a+2]?.id??``);return{a:u,b:t>0?ee(i,t-1)[1]:(_[i]?n?_[i].y:_[i].x:u)+c(i).h+r.pad,at:m}}return{a:u,b:p,at:m}}let h=l(t.id),g=f.get(t.id);if(o?.in===t.id){if(ne(s)===t.id){let e=ee(t.id,te(t.id,o.id)+1)[0];return{a:e,b:e,at:i(a+1)}}return{a:u+h.u0+g.u,b:p,at:m}}if(ne(o)===t.id){let e=ee(t.id,te(t.id,s?.id??``))[0];return{a:e,b:e,at:i(a+1)}}return{a:u,b:u+h.u0,at:m}});return{from:e.from,to:e.to,style:e.style,runs:a}}),ie=e.clusters.flatMap(e=>{if(!e.cycle)return[];let t=f.get(e.id),n=v.get(e.id);if(!t||!n)return[];let r=e=>{let n=(e??[]).filter(e=>!W(e)),r=null;for(let e of n){let n=d(e),i=(t.top.get(e)??0)+n.v;(!r||i>r.v)&&(r={u:n.u,v:i})}return r},i=t.rows.map((e,t)=>e.some(e=>!W(e))?t:-1).filter(e=>e>=0),a=i[0]??0,o=i[i.length-1]??0,s=r(t.rows[o]),c=r(t.rows[a]);if(!s||!c)return[];let l=n.u+(t.start[o]??0)+(t.width[o]??0)/2,u=n.u+(t.start[a]??0)+(t.width[a]??0)/2;if(l-u<24){let e=Math.max(12,Math.min(28,Math.min(s.u,c.u)/4));l=(l+u)/2+e,u=l-2*e}return[{box:e.id,from:l,v0:n.v+s.v,to:u,v1:n.v+c.v,band:n.v+t.v+12}]});return{w:n?S:x,h:n?x:S,at:_,edges:re,returns:ie,down:n}}(i,r,this.down),this.updateComplete.then(()=>this.fit())}fit(){if(this.direction===`auto`){let e=this.clientWidth,t=e>0&&e<640;t!==this.down&&(this.down=t)}this.pz.fit()}select(e){e!==this.selected&&L(this,`cae-select`,{id:e})}act(e){let t=this.nodes.get(e)??this.clusters.get(e)??this.findMark(e);t?.drill?this.drill(e):t&&L(this,`cae-activate`,{id:e})}findMark(e){for(let t of this.drawn.nodes)for(let n of[...t.marks,...t.loose])if(n?.id===e)return n;for(let t of this.matrix?.rows??[])for(let n of t.cells)if(n?.id===e)return n;return null}lit(){let e=this.selected,t=this.hover===null&&e!==null&&this.markSeries.has(e)?this.markSeries.get(e)||e:null,n=this.hover??t??this.highlight??null,r=this.litCache;if(r&&r.key===n&&r.graph===this.graph&&r.related===this.related)return r;let i=n===null?null:(this.related??(e=>new Set([e])))(n);return this.litCache={key:n,graph:this.graph,related:this.related,on:i},this.litCache}known(e){return this.nodes.has(e)||this.clusters.has(e)||!!this.findMark(e)}render(){let e=this.h,t=this.matrix,n=t?this.matrixView(t):this.view===`table`?function(e){let t=e.drawn,n=e.words,r=[...t.edges,...t.stubs].some(e=>e.style===`dashed`),i=e=>n.list(e)||n.none,a=!e.down&&e.laidOut&&e.pz.frameH>0?`height:${Math.round(e.pz.frameH)}px`:`max-height:max(360px, 70vh)`,o=e.arr.drawn.map(t=>e.nodes.get(t)).filter(e=>!!e);return k`<div class="frame tframe" part="frame" data-scroll="x" style=${a} @scroll=${()=>e.card.place()} @click=${t=>!t.target.closest(`tbody tr`)&&e.select(null)}>
|
|
168
|
+
<table class="list view" part="table">
|
|
169
|
+
<thead>
|
|
170
|
+
<tr>
|
|
171
|
+
<th scope="col" class="fit">${n.nameHeader}</th>
|
|
172
|
+
<th scope="col" class="fit">${n.statusHeader}</th>
|
|
173
|
+
<th scope="col">${n.solidHeader}</th>
|
|
174
|
+
${r?k`<th scope="col">${n.dashedHeader}</th>`:j}
|
|
175
|
+
<th scope="col">${n.laterHeader}</th>
|
|
176
|
+
</tr>
|
|
177
|
+
</thead>
|
|
178
|
+
<tbody>
|
|
179
|
+
${H(o,e=>e.id,a=>{let o=function(e,t,n,r){let i=e=>{let t=n.get(e);return t?t.cluster?r(t.label):t.label:e},a=n=>[...t.stubs.filter(t=>t.to===e.id&&t.style===n).map(e=>e.label),...t.edges.filter(t=>t.to===e.id&&t.style===n).map(e=>i(e.from))];return{solid:a(`solid`),dashed:a(`dashed`),later:[...new Set(t.edges.filter(t=>t.from===e.id).map(e=>i(e.to)))]}}(a,t,e.nodes,n.inCluster),s=a.cluster?e.clusters.get(a.cluster):void 0,c=e.selected===a.id,l=k`${(a.icons??[]).map(t=>e.renderIcon(t))}${a.drill?Qa():j}`;return k`<tr class=${c?`sel`:``} part="row" data-id=${a.id} @click=${t=>!t.target.closest(`.loopchip`)&&t.detail<2&&e.select(a.id)} @dblclick=${t=>!t.target.closest(`.loopchip`)&&e.act(a.id)}>
|
|
180
|
+
<th scope="row" class="fit">
|
|
181
|
+
<span class="nm">${l}<button type="button" class="name" title=${a.tip??j} aria-pressed=${c} @focus=${()=>e.focusSelect(a.id)} @keydown=${t=>{t.key===`Enter`&&(t.preventDefault(),e.act(a.id))}}>${a.label}</button>${s?.drill?k`<button type="button" class="taskchip loopchip" title=${s.chipTip??j} aria-label=${s.chipLabel??j} @click=${()=>e.drill(s.id)}>${s.cycle?Za(12):j}${s.note??s.label}</button>`:j}</span>
|
|
182
|
+
</th>
|
|
183
|
+
<td class="fit st">${function(e){let t=k`<span class="sep" aria-hidden="true"> | </span>`;return k`<span class="n" aria-hidden="true" title=${e.progress.label}>${e.progress.done}/${e.progress.total}</span><span class="sr">${e.progress.label}</span>${fo(e).map(e=>k`${t}${e}`)}`}(a)}</td>
|
|
184
|
+
<td class="rel"><span>${i(o.solid)}</span></td>
|
|
185
|
+
${r?k`<td class="rel"><span>${i(o.dashed)}</span></td>`:j}
|
|
186
|
+
<td class="rel"><span>${i(o.later)}</span></td>
|
|
187
|
+
</tr>`})}
|
|
188
|
+
</tbody>
|
|
189
|
+
</table>
|
|
190
|
+
</div>`}(e):function(e){let t=e.pz;return k`<div class="frame gframe ${e.down?`down`:``}" part="frame" style="height:${Math.round(t.frameH)}px" @pointerdown=${t.onPointerDown} @pointermove=${t.onPointerMove} @pointerup=${t.onPointerUp} @pointercancel=${t.onPointerUp} @click=${t=>!t.target.closest(`.node, .cluster, .stub, .tools`)&&e.select(null)}>
|
|
191
|
+
<div class="stage view" part="stage" style="transform:${t.transform}">${function(e){let{on:t}=e.lit(),n=e.drawn,r=e.lay,i=new Map(n.stubs.map(e=>[e.id,e])),a=(t,n)=>{let r=e.clusters.get(t);if(r)return function(e,t,n,r){let i=e.lay?.at[t.id]??null,a=(e.arr.slots[t.id]??[]).flat().filter(e=>!W(e)),o=i?`;width:${i.w}px;height:${i.h}px`:``,s=e.selected===t.id;return k`<section class="cluster ${s?`sel`:``}" part="cluster" role="group" data-cluster=${t.id} style=${oo(e,t.id,n)+o} aria-label=${t.summary??t.label} @click=${n=>so(e,n,t.id)} @dblclick=${n=>co(e,n,t.id)}>
|
|
192
|
+
<div class="hd" part="cluster-label" data-id=${`lbl:${t.id}`}>
|
|
193
|
+
<span class="line">
|
|
194
|
+
${function(e,t,n){let r=t.path?.[0],i=k`<button type="button" class="name" title=${(r?.tip??t.tip)||j} aria-pressed=${n} @focus=${()=>e.focusSelect(t.id)} @keydown=${n=>lo(e,n,t.id)}>${t.cycle?Za():j}${r?.label??t.label}</button>`;return!t.path||t.path.length<2?i:k`${i}${t.path.slice(1).map(t=>k`<span class="psep" aria-hidden="true">›</span><button type="button" class="part" title=${t.tip||j} @click=${n=>{n.stopPropagation(),e.drill(t.id)}} @dblclick=${e=>e.stopPropagation()}>${t.label}</button>`)}`}(e,t,s)}
|
|
195
|
+
${t.note?k`<span class="count">${t.note}</span>`:j}
|
|
196
|
+
</span>
|
|
197
|
+
${t.detail?k`<span class="spread" title=${t.detailTip??j}>${t.detail}</span>`:j}
|
|
198
|
+
</div>
|
|
199
|
+
${t.toggle?k`<span class="cue">${uo(e,t.id,t.path?.map(e=>e.label).join(` › `)??t.label,!0)}</span>`:t.drill?k`<span class="cue" aria-hidden="true">${Qa()}</span>`:j}
|
|
200
|
+
<div class="in">${H(a,e=>e,e=>r(e,i))}</div>
|
|
201
|
+
</section>`}(e,r,n,(e,t)=>a(e,t));let o=i.get(t);if(o)return k`<span class="stub" part="stub" data-id=${o.id} style=${oo(e,o.id,n)} title=${e.words.stubTip}>${o.label}</span>`;let s=e.nodes.get(t);return s?function(e,t,n){let r=e.drawn.series,i=Ka(t,e.barAt),a=no(t,r),o=i?{id:t.id,slots:a.filter(t=>!!t&&e.states[t.m.state]?.tone===`failed`),grid:{cols:8,size:12,gap:4}}:{id:t.id,slots:a,grid:ro(t,r.length)},s=e.selected===t.id,c=(t.icons??[]).map(t=>e.renderIcon(t));return k`<section class="node ${t.drill?`drill`:``} ${t.accent?`accent`:``} ${s?`sel`:``}" part="node" role="group" data-id=${t.id} data-look=${t.look&&t.look!==`neutral`?t.look:j} aria-label=${t.summary??t.label} style="${oo(e,t.id,n)};--cols:${o.grid.cols};--m:${o.grid.size}px;--g:${o.grid.gap}px" @click=${n=>so(e,n,t.id)} @dblclick=${n=>co(e,n,t.id)}>
|
|
202
|
+
<div class="hd" part="node-header">
|
|
203
|
+
<span class="nm">${c}<button type="button" class="name" part="node-name" title=${t.tip??j} aria-pressed=${s} @focus=${()=>e.focusSelect(t.id)} @keydown=${n=>lo(e,n,t.id)}>${t.label}</button></span>
|
|
204
|
+
<span class="right"><span class="count" aria-hidden="true" title=${t.progress.label}>${t.progress.done}/${t.progress.total}</span>${t.toggle?uo(e,t.id,t.label,!1):t.drill?k`<span class="cue" aria-hidden="true">${Qa()}</span>`:j}</span>
|
|
205
|
+
</div>
|
|
206
|
+
${i?function(e,t,n){let r=Object.keys(e.states),i=function(e,t){let n=t.reduce((t,n)=>t+(e[n]??0),0);return t.filter(t=>(e[t]??0)>0).map(t=>({state:t,n:e[t]??0,pct:100*(e[t]??0)/Math.max(1,n)}))}(t.counts,r),a=n.slots.slice(0,8),o=n.slots.length-a.length,s=Math.min(e.active.get(n.id)??0,Math.max(0,a.length-1));return k`<div class="sbar" role="img" aria-label=${r.filter(e=>t.counts[e]).map(n=>ui(e.states,n,t.counts[n]??0)).join(` | `)}>
|
|
207
|
+
${i.map(t=>{let n=e.states[t.state];return k`<i data-tone=${I(n?.tone)} data-shape=${n?.shape??j} style="width:${t.pct}%" title=${ui(e.states,t.state,t.n)}></i>`})}
|
|
208
|
+
</div>
|
|
209
|
+
${a.length?k`<div class="fails" @keydown=${t=>mo(e,t,{...n,slots:a,grid:{...n.grid,cols:a.length}})}>
|
|
210
|
+
${a.map((t,r)=>t?po(e,n,t,r,r===s,!0):j)}
|
|
211
|
+
${o>0?k`<span>${e.words.more(o)}</span>`:j}
|
|
212
|
+
</div>`:j}`}(e,t,o):function(e,t){let n=Math.min(e.active.get(t.id)??io(t.slots),t.slots.length-1);return k`<div class="marks ${t.grid.size>=10?`big`:``}" @keydown=${n=>mo(e,n,t)}>
|
|
213
|
+
${t.slots.map((r,i)=>r?po(e,t,r,i,i===n):k`<span class="slot"></span>`)}
|
|
214
|
+
</div>`}(e,o)}
|
|
215
|
+
${t.notes?.length?k`<div class="ex" aria-hidden="true">${fo(t)}</div>`:j}
|
|
216
|
+
</section>`}(e,s,n):j},o=!!r&&n.nodes.every(e=>r.at[e.id]),s=r?.w??0,c=r?.h??0;return k`<div class="dag ${e.down?`down`:``} ${t?`hl`:``} ${o?``:`unplaced`}" style="width:${s}px;height:${c}px" @mouseleave=${()=>e.hover=null}>
|
|
217
|
+
<svg class="edges" aria-hidden="true" width=${s} height=${c}>
|
|
218
|
+
<defs>
|
|
219
|
+
<marker id="arr" viewBox="0 0 8 8" refX="8" refY="4" markerWidth="8" markerHeight="8" markerUnits="userSpaceOnUse" orient="auto">
|
|
220
|
+
<path d="M0,0.5 L8,4 L0,7.5 z" fill="var(--line2)" stroke="none"></path>
|
|
221
|
+
</marker>
|
|
222
|
+
<marker id="arr-ret" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="8" markerHeight="8" markerUnits="userSpaceOnUse" orient="auto">
|
|
223
|
+
<path class="ret-tip" d="M0,0.5 L8,4 L0,7.5 z"></path>
|
|
224
|
+
</marker>
|
|
225
|
+
</defs>
|
|
226
|
+
${(r?.edges??[]).map(e=>A`<path class=${e.style} part="edge" d=${function(e,t=!1){let n=e=>Math.round(2*e)/2,r=(e,r)=>t?`${n(r)},${n(e)}`:`${n(e)},${n(r)}`,i=e[0];if(!i)return``;let a=`M${r(i.a,i.at)}`;return e.forEach((t,n)=>{t.b!==t.a&&(a+=` L${r(t.b,t.at)}`);let i=e[n+1];if(!i)return;if(Math.abs(i.at-t.at)<.5)return void(i.a!==t.b&&(a+=` L${r(i.a,i.at)}`));let o=(t.b+i.a)/2;a+=` C${r(o,t.at)} ${r(o,i.at)} ${r(i.a,i.at)}`}),a}(e.runs,r?.down)} marker-end="url(#arr)"></path>`)}
|
|
227
|
+
${(r?.returns??[]).map(e=>A`<path class="ret" data-cluster=${e.box} d=${function(e,t=!1,n=3){let r=e=>Math.round(2*e)/2,i=(e,n)=>t?`${r(n)},${r(e)}`:`${r(e)},${r(n)}`,a=Math.max(0,Math.min(6,(e.from-e.to)/2,e.band-e.v0-n,e.band-e.v1-n));return[`M${i(e.from,e.v0+n)}`,`L${i(e.from,e.band-a)}`,`Q${i(e.from,e.band)} ${i(e.from-a,e.band)}`,`L${i(e.to+a,e.band)}`,`Q${i(e.to,e.band)} ${i(e.to,e.band-a)}`,`L${i(e.to,e.v1+n)}`].join(` `)}(e,r?.down)} marker-end="url(#arr-ret)"></path>`)}
|
|
228
|
+
</svg>
|
|
229
|
+
${H((e.arr.slots[``]??[]).flat().filter(e=>!W(e)),e=>e,e=>a(e,null))}
|
|
230
|
+
</div>`}(e)}</div>
|
|
231
|
+
</div>`}(e),r=this.selected;return k`<div class="col">
|
|
232
|
+
<slot name="crumbs"></slot>
|
|
233
|
+
<div class="main">${n}${r&&this.querySelector(`[slot=inspector]`)&&this.known(r)?to(r,k`<section id="insp" class="insp ${this.down?`sheet`:``}" part="inspector" aria-label=${this.words.inspector} @keydown=${this.card.onCardKey}>
|
|
234
|
+
<span class="ptr" aria-hidden="true"></span>
|
|
235
|
+
<div class="scroll"><slot name="inspector"></slot></div>
|
|
236
|
+
</section>`):j}<div class="sr" role="status">${this.announced}</div></div>
|
|
237
|
+
${function(e,t){let n=!!t||e.asTable;return k`<div class="foot">
|
|
238
|
+
${function(e,t){let n=e.drawn,r=e.asTable&&!t,i=(r?[]:t?t.rows.flatMap(e=>e.cells).map(e=>e&&{state:e.state,badge:void 0}):n.nodes.flatMap(t=>no(t,n.series).map(n=>n&&{state:n.m.state,badge:Ka(t,e.barAt)?void 0:n.m.badge}))).filter(e=>e!==null),a=new Set(i.map(e=>e.state)),o=i.some(e=>e.badge),s=!t&&!r&&[...n.edges,...n.stubs].some(e=>e.style===`dashed`),c=new Set(t?t.head.flat().flatMap(e=>e.icons??[]):n.nodes.flatMap(e=>e.icons??[])),l=!t&&!r&&n.clusters.some(e=>e.cycle),u=!t&&(!r&&n.clusters.some(e=>e.drill)||n.nodes.some(e=>e.drill)),d=Object.keys(e.states)[0]??``,f=e=>A`<svg width="22" height="8" aria-hidden="true"><path d="M1,4 H21" stroke-dasharray=${e?`5 4`:`none`}></path></svg>`;return ai([...Object.entries(e.states).filter(([e])=>a.has(e)).map(([t,n])=>({label:n.label,icon:ho(e,t),decorative:!0})),...o?[{label:e.words.badge,icon:ho(e,d,`2`),decorative:!0}]:[],...Object.entries(e.words.iconNames).filter(([e])=>c.has(e)).map(([t,n])=>({label:n,icon:e.renderIcon(t)})),...s?[{label:e.words.solidEdge,icon:f(!1)},{label:e.words.dashedEdge,icon:f(!0)}]:[],...l?[{label:e.words.cycle,icon:k`<svg width="24" height="12" aria-hidden="true"><path class="ret" d="M20,1.5 V5.5 Q20,9.5 16,9.5 H8 Q4,9.5 4,5.5 V5"></path>
|
|
239
|
+
<path class="ret-head" d="M4,0.8 L1.4,5 L6.6,5 z"></path></svg>`}]:[],...u?[{label:e.words.drill,icon:Qa()}]:[]],{cls:`big`})}(e,t)}
|
|
240
|
+
<div class="tools">${n?j:function(e){let t=e.pz,n=e.words,r=!t.moved&&t.fitK>=1;return k`<button type="button" aria-label=${n.zoomOut} title=${n.zoomOutTip} @click=${()=>t.zoomBy(.8)}>−</button>
|
|
241
|
+
<button type="button" aria-label=${n.zoomIn} title=${n.zoomInTip} @click=${()=>t.zoomBy(1.25)}>+</button>
|
|
242
|
+
<button type="button" ?disabled=${r} @click=${()=>t.showAll()}>${n.showAll}</button>`}(e)}${function(e,t){return k`<cae-segmented class="views" .options=${[{value:`graph`,label:e.words.graph},{value:`table`,label:e.words.table}]} .value=${t?`table`:`graph`} label=${e.words.view} @cae-change=${t=>{t.stopPropagation(),e.showView(t.detail.value===`table`?`table`:`graph`)}}></cae-segmented>`}(e,n)}</div>
|
|
243
|
+
<div class="keys" part="keys">${function(e,t){let n=e.words,r=e.selected?n.clearKey:n.upKey;return[...t?n.matrixKeys:e.asTable?n.tableKeys:n.graphKeys,r].filter(Boolean)}(e,t).map((e,t)=>k`${t?` | `:``}<span>${e}</span>`)}</div>
|
|
244
|
+
</div>`}(e,t)}
|
|
245
|
+
</div>`}matrixView(e){let t=this.down?0:Math.round(Math.max(this.pz.frameH,this.card.room));return k`<div class="frame mxframe" part="frame" style=${t?`min-height:${t}px`:``}>
|
|
246
|
+
<cae-mark-matrix .matrix=${e} .states=${this.states} .selected=${this.selected} .highlight=${this.highlight} .key=${this.key} .strings=${this.matrixStrings} .renderIcon=${this.renderIcon} .iconStyles=${this.iconStyles}></cae-mark-matrix>
|
|
247
|
+
</div>`}get laidOut(){return this.layFor===this.key}get asTable(){return this.view===`table`}focusSelect(e){this.card.quiet||this.select(e)}drill(e){L(this,`cae-drill`,{id:e})}toggle(e,t){L(this,`cae-toggle`,{id:e,open:t})}showView(e){this.matrix&&e===`table`||(this.matrix||(this.view=e),L(this,`cae-view-change`,{view:e}))}},vo=(e,t,n)=>e===1?`1 ${t}`:`${e} ${n}`,yo={sections:`Sessions`,sectionsTip:``,loadEarlier:e=>`Show ${vo(e,`earlier line`,`earlier lines`)}`,newBelow:e=>`Show ${vo(e,`new event`,`new events`)}`,newInLatest:e=>`Show ${vo(e,`new event`,`new events`)} in the latest session`,prompt:`Prompt`,assistant:`Assistant`,reasoning:`Reasoning`,characters:e=>`${e} characters`,tool:`tool`,results:e=>vo(e,`result`,`results`),done:`done`,failed:`failed`,running:`running`,interrupted:`interrupted`,interruptedTip:`Ended with no result`,query:`query`,page:`page`,fullText:`Full text`,showAll:e=>`Show all (${e} characters)`,showLess:`Show less`},bo=O` :host{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;position:relative;}:host([mode='none']){display:none;}:host([mode='tabs']){flex:none;}:host([mode='tabs']) .scroller,:host([mode='tabs']) .newpill{display:none;}.rounds{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 10px;padding-left:2px;}.rounds-lbl{color:var(--text-muted);font-size:11.5px;font-weight:600;margin-right:4px;cursor:help;}.stab{padding:3px 11px;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--text-muted);cursor:pointer;font-size:12px;display:inline-flex;align-items:center;}.stab:hover{border-color:var(--accent);}.stab.sel{background:var(--accent-bg);border-color:var(--accent);color:var(--text);}.stab-m{font-family:var(--mono);font-size:10.5px;color:var(--text-muted);margin-left:4px;}.stab.sel .stab-m{color:var(--text-2);}.stab .dot{width:6px;height:6px;margin-left:4px;}.stab .mk{margin-right:4px;}.stab .mk.ok{color:var(--status-done);}.stab .mk.bad{color:var(--status-failed);}.verdict{margin:6px 10px 4px 41px;padding:7px 11px;border-radius:10px;border:1px solid;font-size:12px;}.verdict[data-tone]{background:var(--tone-bg);color:var(--text);}.verdict[data-tone='attention']{border-color:color-mix(in srgb,var(--tone) 40%,transparent);}.verdict[data-tone='failed']{border-color:color-mix(in srgb,var(--tone) 45%,transparent);}.verdict b{display:block;margin-bottom:2px;}.verdict ul{margin:2px 0 0;padding-left:18px;font-family:var(--mono);font-size:11.5px;}.scroller{flex:1 1 auto;min-height:0;overflow:auto;border:1px solid var(--line);border-radius:14px;background:linear-gradient(180deg,var(--panel),var(--well));padding:4px 2px 8px;font-size:12.5px;}.back{margin:6px 10px;background:var(--raise);border:1px solid var(--line2);border-radius:8px;padding:3px 10px;cursor:pointer;color:var(--text-2);}.back:hover{border-color:var(--accent);}.inv-body{display:flex;flex-direction:column;gap:10px;}.inv-head{border:1px solid var(--line2);border-radius:12px;background:var(--raise);padding:8px 10px;margin:4px 8px 6px;}.inv-who{display:flex;flex-wrap:wrap;gap:6px;}.inv-cmdbox{margin-top:6px;}.inv-cmdbox summary,.inv-prompt summary{cursor:pointer;font-size:11px;color:var(--text-muted);}.inv-prompt summary{font-size:11.5px;}.inv-prompt summary:hover{color:var(--accent);}.inv-cmd{font-family:var(--mono);font-size:11.5px;white-space:pre-wrap;word-break:break-all;margin:4px 0 6px;max-height:160px;overflow:auto;color:var(--text);}.inv-ptext{margin-top:6px;max-height:360px;overflow:auto;}.msg{display:flex;gap:9px;padding:3px 10px;}.av{width:22px;height:22px;flex:0 0 22px;border-radius:7px;line-height:22px;font-size:11px;text-align:center;font-weight:700;}.av-a{background:var(--agent-bg);color:var(--agent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--agent) 35%,transparent);}.av-l{background:var(--raise);color:var(--text-2);}.av-t{background:var(--raise);color:var(--text-muted);}.bd{flex:1;min-width:0;background:color-mix(in srgb,var(--text) 2.5%,transparent);border:1px solid var(--line);border-radius:3px 10px 10px 10px;padding:5px 10px;}.hd{font-size:11px;font-weight:600;color:var(--text-muted);margin-bottom:1px;}.tx{color:var(--text);line-height:1.5;word-break:break-word;}.tx pre,.tx code{white-space:pre-wrap;}.tx pre{margin:0 0 4px;}.toolcard,.typing{margin-left:41px;margin-right:10px;}.toolcard{border:1px solid var(--line);border-left:3px solid var(--line2);border-radius:10px;margin-top:3px;margin-bottom:3px;overflow:hidden;background:var(--well);transition:border-color 0.3s;}.toolcard.run{border-left-color:var(--status-running);}.toolcard.err{border-left-color:var(--status-failed);}.th{display:flex;gap:9px;align-items:baseline;padding:4px 9px;cursor:pointer;}.th:hover{background:color-mix(in srgb,var(--text) 4%,transparent);}.tn{font-family:var(--mono);font-weight:600;flex:none;display:inline-flex;align-items:center;}.tn::before{content:'⚒';display:inline-grid;place-items:center;width:20px;height:20px;margin-right:7px;border-radius:6px;background:var(--raise);color:var(--text-2);font-size:11px;}.toolcard[data-tool='bash'] .tn::before{content:'❯';}.toolcard[data-tool='read'] .tn::before{content:'▤';}.toolcard[data-tool='grep'] .tn::before,.toolcard[data-tool='glob'] .tn::before{content:'⌕';}.toolcard[data-tool='edit'] .tn::before,.toolcard[data-tool='write'] .tn::before{content:'✎';}.toolcard[data-tool='task'] .tn::before,.toolcard[data-tool='agent'] .tn::before{content:'✦';color:var(--agent);}.toolcard[data-tool='web-search'] .tn::before{content:'◍';}.toolcard[data-tool='web-fetch'] .tn::before{content:'⇣';}.toolcard.revealed{box-shadow:0 0 0 1px var(--accent);}.tp{font-family:var(--mono);font-size:11.5px;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.ti{color:var(--text-muted);font-size:11px;flex:none;max-width:35%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.st-run,.st-ok,.st-err,.st-int{flex:none;white-space:nowrap;}.st-run{color:var(--status-running);display:inline-flex;align-items:center;gap:6px;}.st-ok{color:var(--text-muted);}.st-ok>[aria-hidden]{color:var(--status-done);font-weight:700;}.st-err{color:var(--status-failed);}.st-int{color:var(--status-attention);}.pdot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--status-running);animation:breathe 1.8s ease-in-out infinite;}.tb{padding:6px 9px;border-top:1px solid var(--line);background:var(--bg);}.tb pre{white-space:pre-wrap;word-break:break-word;margin:4px 0;font-family:var(--mono);font-size:12px;}.fold{max-height:220px;overflow:hidden;position:relative;}.fold.open{max-height:none;}.foldbtn{cursor:pointer;color:var(--accent);font-size:11px;background:none;border:0;padding:0;font-family:inherit;}.wq{font-size:12px;margin:2px 0 6px;}.wq b{font-family:var(--mono);font-weight:600;}.wl{color:var(--text-muted);font-size:11px;margin-right:6px;}.links{margin:0 0 6px;padding-left:30px;font-size:12px;}.links li{margin:2px 0;overflow-wrap:anywhere;}.links a{color:var(--accent);text-decoration:none;}.links a:hover{text-decoration:underline;}.rawfold>summary{cursor:pointer;color:var(--text-muted);font-size:11px;}.plink{color:var(--accent);text-decoration:none;font-family:var(--mono);overflow-wrap:anywhere;}.plink:hover{text-decoration:underline;}.host{color:var(--text-muted);font-family:var(--mono);font-size:11px;margin-left:6px;}.sysline{display:flex;gap:8px;align-items:baseline;padding:2px 10px 2px 41px;font-size:11px;color:var(--text-muted);font-family:var(--mono);}.sysline .tx{color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.typing{display:flex;align-items:center;gap:10px;padding:10px 0;}.typing .av{width:26px;height:26px;flex:0 0 26px;border-radius:9px;display:grid;place-items:center;font-size:12px;}.dots{display:inline-flex;gap:4px;padding:8px 12px;border-radius:12px;background:var(--agent-bg);}.dots i{width:6px;height:6px;border-radius:50%;background:var(--agent);animation:bounce 1.2s infinite ease-in-out;}.dots i:nth-child(2){animation-delay:0.15s;}.dots i:nth-child(3){animation-delay:0.3s;}.scroller:not(.bulk) .msg,.scroller:not(.bulk) .toolcard{animation:enter 0.35s var(--ease) both;}.newpill{position:absolute;left:50%;bottom:26px;transform:translateX(-50%);z-index:5;cursor:pointer;padding:6px 14px;border-radius:999px;border:1px solid var(--accent);background:color-mix(in srgb,var(--panel) 92%,transparent);color:var(--accent);font-size:12px;font-weight:600;box-shadow:0 10px 28px color-mix(in srgb,var(--shadow) 50%,transparent);backdrop-filter:blur(6px);animation:toast-in 0.3s var(--ease) both;}.newpill:hover{background:var(--accent-bg);}`,xo=e=>k`${e.map(e=>k`<span class="tag ${e.look??``}" part="tag" title=${e.tip??j}><span class="tag-l">${e.label}</span>${e.value}</span>`)}`,So=O` .tag{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;padding:2px 9px;border-radius:7px;border:1px solid var(--line2);white-space:nowrap;color:var(--text);background:var(--raise);}.tag-l{font-size:10px;font-weight:400;color:var(--text-muted);font-family:var(--sans);}.tag.mono,.tag.quiet{font-family:var(--mono);}.tag.quiet{color:var(--text-2);font-weight:500;background:none;}`,Co=class{constructor(e){this.scroller=e,this.stick=!0,this.restored=!1,this.lastTop=0,this.gliding=!1}toBottom(e=!1){let t=this.scroller();t&&(this.gliding=e,e?t.scrollTo({top:t.scrollHeight,behavior:`smooth`}):t.scrollTop=t.scrollHeight)}read(){let e=this.scroller();if(!e||!e.clientHeight)return null;let t=e.scrollHeight-e.scrollTop-e.clientHeight<60;return this.gliding&&(e.scrollTop<this.lastTop-1||t)&&(this.gliding=!1),this.stick=t||this.gliding,this.lastTop=e.scrollTop,{stick:this.stick,top:Math.round(e.scrollTop)}}async restore(e,t){let n=this.scroller();if(e&&!e.stick&&n){this.stick=!1;let r=performance.now()+4e3;await new Promise(i=>{let a=()=>{let o=n.scrollHeight-n.clientHeight;n.scrollTop=Math.min(e.top,o),o>=e.top||performance.now()>r||t()?i():requestAnimationFrame(a)};a()}),this.lastTop=n.scrollTop}else this.stick=!0,this.toBottom();this.restored=!0}reshow(){let e=this.scroller();e&&(this.stick?this.toBottom():e.scrollTop=this.lastTop)}};function wo(e,t,n){let r=k`<pre><code>${t.slice(0,4e3)}</code></pre>`;if(t.length<=1200)return r;let i=e.folds.has(n);return k`<div>
|
|
248
|
+
<div class="fold ${i?`open`:``}">${r}</div>
|
|
249
|
+
<button type="button" class="foldbtn" @click=${()=>{i?e.folds.delete(n):e.folds.add(n),e.requestUpdate()}}>${i?e.s.showLess:e.s.showAll(t.length)}</button>
|
|
250
|
+
</div>`}var To=()=>globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1,Eo=class extends M{constructor(...e){super(...e),this.sections=[],this.shown=null,this.live=!1,this.earlier=0,this.loading=!1,this.count=null,this.mode=`full`,this.memory=null,this.markdown=null,this.renderDetail=null,this.strings={},this.bulk=!0,this.unseen=0,this.pinned=null,this.revealed=``,this.revealPending=!1,this.follow=new Co(()=>this.scroller),this.started=!1,this.total=0,this.reloading=!1,this.lastShown=-1,this.opened=new Set,this.folds=new Set,this.openDetails=new Set,this.mdCache=new Map}static{this.styles=[V,Gr,So,bo]}get shownIndex(){let e=this.sections.length;if(!e)return-1;let t=this.shown??this.pinned??e-1;return Math.max(0,Math.min(e-1,t))}reveal(e){let t=this.sections.findIndex(t=>t.items.some(t=>t.id===e));return t<0?-1:(this.setOpen(e,!0),this.pinned=null,this.revealed=e,this.revealPending=!0,this.requestUpdate(),t)}onLatest(){let e=this.sections.length;return e<2||this.shownIndex===e-1}isOpen(e){return this.memory?this.memory.isOpen(e):this.opened.has(e)}setOpen(e,t){this.memory?this.memory.setOpen(e,t):t?this.opened.add(e):this.opened.delete(e)}willUpdate(e){let t=this.count??this.sections.reduce((e,t)=>e+1+t.items.length,0);if(e.has(`sections`)){let n=e.get(`sections`)?.length??0;n&&this.sections.length>n&&this.shown===null&&this.pinned===null&&!this.follow.stick&&!this.bulk&&(this.pinned=n-1),this.reloading&&(this.reloading=!1,this.lastShown=-1,this.total=t)}if(!this.loading){if(this.started){if(t!==this.total){let e=t-this.total;this.total=t,e>0&&this.updateComplete.then(()=>{this.follow.stick&&this.onLatest()?this.follow.toBottom(!To()):this.unseen+=e})}}else this.started=!0,this.total=t,this.afterFirst()}}async afterFirst(){await this.updateComplete,await this.follow.restore(this.memory?.scroll(),()=>!this.isConnected),requestAnimationFrame(()=>this.bulk=!1)}onScroll(){let e=this.follow.read();e&&(this.follow.stick&&this.onLatest()&&(this.unseen=0),this.follow.restored&&this.memory?.setScroll(e))}updated(e){let t=this.shownIndex;if(t!==this.lastShown){let e=this.lastShown;this.lastShown=t,e!==-1&&this.follow.restored&&(this.follow.toBottom(),To()||this.scroller?.animate?.([{opacity:.25},{opacity:1}],{duration:240,easing:`ease-out`})),L(this,`cae-section-shown`,{index:t})}let n=e.get(`mode`);if(n&&n!==`full`&&this.mode===`full`&&this.follow.reshow(),this.revealPending){let e=this.renderRoot.querySelector(`[data-card="${CSS.escape(this.revealed)}"]`);e&&this.mode===`full`&&(this.revealPending=!1,this.follow.stick=!1,e.scrollIntoView({block:`center`}))}}pick(e){this.pinned=null,L(this,`cae-section-change`,{index:e===this.sections.length-1?null:e})}toLatest(){let e=this.sections.length;e>1&&this.shownIndex!==e-1&&(this.pinned=null,this.shown!==null&&L(this,`cae-section-change`,{index:null})),this.follow.stick=!0,this.unseen=0,this.updateComplete.then(()=>this.follow.toBottom(!0))}loadEarlier(){this.reloading=!0,L(this,`cae-load-earlier`,{})}render(){let e=jr(yo,this.strings),t=this.sections,n=this.shownIndex,r=t[n],i={s:e,live:this.live,revealed:this.revealed,folds:this.folds,isOpen:e=>this.isOpen(e),toggle:e=>{this.setOpen(e,!this.isOpen(e)),this.requestUpdate()},requestUpdate:()=>this.requestUpdate()};return k`${this.renderPicker(t,n,e)}
|
|
251
|
+
<div class="scroller ${this.bulk?`bulk`:``}" @scroll=${()=>this.onScroll()}>
|
|
252
|
+
${this.earlier?k`<div class="meta"><button type="button" class="back" @click=${()=>this.loadEarlier()}>
|
|
253
|
+
${e.loadEarlier(this.earlier)}</button></div>`:j}
|
|
254
|
+
${r?to(r.id,this.renderSection(r,n===t.length-1,e,i)):j}
|
|
255
|
+
${!r&&this.live?this.typing(e):j}
|
|
256
|
+
</div>
|
|
257
|
+
${this.unseen?k`<button type="button" class="newpill" @click=${()=>this.toLatest()}>
|
|
258
|
+
${this.onLatest()?e.newBelow(this.unseen):e.newInLatest(this.unseen)}</button>`:j}`}renderPicker(e,t,n){return e.length<2?j:k`<div class="rounds" role="group" aria-label=${n.sections} part="picker">
|
|
259
|
+
<span class="rounds-lbl" title=${n.sectionsTip||j}>${n.sections}</span>
|
|
260
|
+
${e.map((e,n)=>{let r=e.verdict;return k`<button type="button" class="stab ${n===t?`sel`:``}" title=${r?.tip||j} aria-pressed=${n===t} @click=${()=>this.pick(n)}>
|
|
261
|
+
${r?k`<span class="mk ${r.tone===`done`?`ok`:`bad`}" aria-hidden="true">${r.tone===`done`?`✓`:`✕`}</span><span class="sr">${r.text}</span>`:j}${e.title}
|
|
262
|
+
${e.facts?.length?k` <span class="stab-m">${e.facts.join(` | `)}</span>`:j}
|
|
263
|
+
${e.active?k`<span class="dot" data-tone="running"></span>`:j}
|
|
264
|
+
</button>`})}
|
|
265
|
+
</div>`}renderSection(e,t,n,r){let i=e.footer;return k`<div class="inv-body" part="section">
|
|
266
|
+
${e.tags?.length||e.details?.length?this.renderHead(e):j}
|
|
267
|
+
${H(e.items,e=>e.id,e=>this.renderItem(e,n,r))}
|
|
268
|
+
${t&&this.live?this.typing(n):j}
|
|
269
|
+
${i?k`<div class="verdict" part="verdict" data-tone=${I(i.tone)}>
|
|
270
|
+
<b>${i.title}</b>
|
|
271
|
+
${i.list?.length?k`<ul>${i.list.map(e=>k`<li>${e}</li>`)}</ul>`:i.note?k`<span class="meta">${i.note}</span>`:j}
|
|
272
|
+
</div>`:j}
|
|
273
|
+
</div>`}renderHead(e){return k`<div class="inv-head">
|
|
274
|
+
<div class="inv-who">${xo(e.tags??[])}</div>
|
|
275
|
+
${(e.details??[]).map(t=>t.code?k`<details class="inv-cmdbox"><summary>${t.summary}</summary><pre class="inv-cmd"><code>${t.text}</code></pre></details>`:this.renderProse(e,t))}
|
|
276
|
+
</div>`}renderProse(e,t){let n=`${e.id}:${t.id}`,r=this.openDetails.has(n);return k`<details class="inv-prompt" ?open=${r} @toggle=${e=>{let t=e.target.open;t!==this.openDetails.has(n)&&(t?this.openDetails.add(n):this.openDetails.delete(n),this.requestUpdate())}}>
|
|
277
|
+
<summary>${t.summary}</summary>
|
|
278
|
+
${r?k`<div class="inv-ptext">${this.renderDetail?this.renderDetail(t):k`<div class="tx">${this.md(n,t.text)}</div>`}</div>`:j}
|
|
279
|
+
</details>`}md(e,t){if(!this.markdown)return t;let n=this.mdCache.get(e);if(n?.raw===t)return zi(n.html);let r=this.markdown(t);return this.mdCache.set(e,{raw:t,html:r}),zi(r)}bubble(e,t,n,r,i){return k`<div class="msg" part="bubble" title=${i??j}>
|
|
280
|
+
<div class="av ${t}">${e}</div>
|
|
281
|
+
<div class="bd"><div class="hd">${n}</div>${r}</div>
|
|
282
|
+
</div>`}renderItem(e,t,n){switch(e.type){case`prompt`:return this.bubble(`▸`,`av-l`,t.prompt,k`<div class="tx meta">${t.characters(e.text.length)}</div>`,e.text.slice(0,600));case`message`:return this.bubble(`A`,`av-a`,t.assistant,k`<div class="tx">${this.md(e.id,e.text)}</div>`);case`reasoning`:return this.bubble(`✦`,`av-t`,t.reasoning,k`<div class="tx">${this.md(e.id,e.text)}</div>`);case`event`:return k`<div class="msg" part="bubble"><div class="av av-t" aria-hidden="true">${e.icon}</div><div class="bd"><div class="hd">${e.title}</div>${e.text?k`<div class="tx meta">${e.text}</div>`:j}</div></div>`;case`notice`:return k`<div class="sysline" part="notice"><span aria-hidden="true">⚙</span><span class="tx">${e.text}</span></div>`;case`tool`:return function(e,t){let{s:n}=e,r=e.isOpen(t.id),i=t.links?.length??0,a=t.status===`ok`?k`<span class="st-ok"><span aria-hidden="true">✓</span> ${n.done}</span>`:t.status===`error`?k`<span class="st-err"><span aria-hidden="true">✕</span> ${n.failed}</span>`:e.live?k`<span class="st-run"><i class="pdot"></i>${n.running}</span>`:k`<span class="st-int" title=${n.interruptedTip}><span aria-hidden="true">◌</span> ${n.interrupted}</span>`;return k`<div class="toolcard ${t.status===`running`?`run`:t.status===`error`?`err`:`ok`} ${e.revealed===t.id?`revealed`:``}" part="tool" data-tool=${t.query?`web-search`:t.page?`web-fetch`:t.icon} data-card=${t.id}>
|
|
283
|
+
<div class="th" role="button" tabindex="0" aria-expanded=${r?`true`:`false`} @click=${()=>e.toggle(t.id)} @keydown=${e=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),e.currentTarget.click())}}>
|
|
284
|
+
<span class="tn">${t.name||n.tool}</span><span class="tp">${t.summary}</span><span class="ti" >${i?n.results(i):t.intent}</span >${a}
|
|
285
|
+
</div>
|
|
286
|
+
${r?k`<div class="tb" part="tool-body">${function(e,t){let n=t.output,r=t.links??[],i=t.query||t.page;if(!i)return n===null?wo(e,t.body??``,`${t.id}:cmd`):k`${t.body?wo(e,t.body,`${t.id}:cmd`):j}${wo(e,n,`${t.id}:out`)}`;let a=!t.query&&/^https?:\/\//.test(i);return k`<div class="wq">
|
|
287
|
+
<span class="wl">${t.query?e.s.query:e.s.page}</span>${a?k`<a class="plink" href=${i} target="_blank" rel="noopener noreferrer">${i}</a>`:k`<b>${i}</b>`}
|
|
288
|
+
</div>
|
|
289
|
+
${r.length?k`<ol class="links">
|
|
290
|
+
${r.map(e=>k`<li><a href=${e.url} target="_blank" rel="noopener noreferrer">${e.title}</a><span class="host">${function(e){try{return new URL(e).host}catch{return``}}(e.url)}</span></li>`)}
|
|
291
|
+
</ol>`:j}
|
|
292
|
+
${n===null?j:r.length?k`<details class="rawfold"><summary>${e.s.fullText}</summary>${wo(e,n,`${t.id}:out`)}</details>`:wo(e,n,`${t.id}:out`)}`}(e,t)}</div>`:j}
|
|
293
|
+
</div>`}(n,e)}}typing(e){return k`<div class="typing"><span class="av av-a">A</span><span class="dots"><i></i><i></i><i></i></span><span class="meta">${e.running}</span></div>`}};U([P({attribute:!1})],Eo.prototype,`sections`,void 0),U([P({attribute:!1})],Eo.prototype,`shown`,void 0),U([P({type:Boolean})],Eo.prototype,`live`,void 0),U([P({type:Number})],Eo.prototype,`earlier`,void 0),U([P({type:Boolean})],Eo.prototype,`loading`,void 0),U([P({attribute:!1})],Eo.prototype,`count`,void 0),U([P({reflect:!0})],Eo.prototype,`mode`,void 0),U([P({attribute:!1})],Eo.prototype,`memory`,void 0),U([P({attribute:!1})],Eo.prototype,`markdown`,void 0),U([P({attribute:!1})],Eo.prototype,`renderDetail`,void 0),U([P({attribute:!1})],Eo.prototype,`strings`,void 0),U([F()],Eo.prototype,`bulk`,void 0),U([F()],Eo.prototype,`unseen`,void 0),U([F()],Eo.prototype,`pinned`,void 0),U([F()],Eo.prototype,`revealed`,void 0),U([xn(`.scroller`)],Eo.prototype,`scroller`,void 0);var Do=new Map;function G(e,t=!1,n=jn()){if(!e)return``;let r=new Date(e);return Number.isNaN(r.getTime())?e:function(e,t){let n=`${e}|${t}`,r=Do.get(n);return r||(r=new Intl.DateTimeFormat(e,{...t?{month:`short`,day:`numeric`}:{},hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hourCycle:`h23`}),Do.set(n,r)),r}(n,t).format(r)}function Oo(e,t=Date.now()){let n=Date.parse(e||``);if(Number.isNaN(n))return``;let r=Math.max(0,(t-n)/1e3);return E(r<60?`just now`:r<3600?T`${Math.floor(r/60)}m ago`:r<86400?T`${Math.floor(r/3600)}h ago`:T`${Math.floor(r/86400)}d ago`)}var ko=e=>e.charAt(0).toLocaleUpperCase(jn())+e.slice(1),Ao=(...e)=>e.filter(e=>!!e),K=(...e)=>Ao(...e).join(` | `),jo=new Map;function Mo(e,t=jn()){let n=jo.get(t);return n||(n=new Intl.ListFormat(t,{type:`conjunction`}),jo.set(t,n)),n.format(e)}var q=(e,t=` · `)=>`${e.kind??``}${e.unit?t+e.unit:``}`;function No(e){let t=(e||``).trim();if(!t)return``;let n=(t.split(`
|
|
294
|
+
`)[0]||``).trim();return n.length>100?`${n.slice(0,100)}…`:n}function J(e){let t=e??0;return t<1e3?String(Math.round(t)):t<1e4?`${(t/1e3).toFixed(1).replace(/\.0$/,``)}k`:t<1e6?`${Math.round(t/1e3)}k`:`${(t/1e6).toFixed(1).replace(/\.0$/,``)}M`}function Y(e){return e==null?`—`:e===0?`$0`:e<.001?`<$0.001`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}function Po(e){let t=new Map;for(let n of e)for(let[e,r]of Object.entries(n.unread_events??{}))t.set(e,(t.get(e)??0)+r);return[...t].map(([e,t])=>`${e} ×${t}`).join(`, `)}function Fo(e){switch(e){case`done`:return E(`done`,{id:`outcome-done`});case`recovered`:return E(`done after retrying`);case`partial`:return E(`partly done`,{id:`outcome-partial`});case`failed`:return E(`failed`);case`not_started`:return E(`not started`);case`running`:return E(`running`);case`waiting`:return E(`waiting`);case`skipped`:return E(`skipped`)}}var Io=(e,t)=>e!==`waiting`||t?Fo(e):E(`not run`);function X(e,t){switch(e){case`done`:return E(T`${t} done`);case`recovered`:return E(T`${t} done after retrying`);case`partial`:return E(T`${t} partly done`);case`failed`:return E(T`${t} failed`);case`not_started`:return E(T`${t} not started`);case`running`:return E(T`${t} running`);case`waiting`:return E(T`${t} waiting`);case`skipped`:return E(T`${t} skipped`);case`not_run`:return E(T`${t} not run`)}}function Lo(e,t){return e>0?t:`neutral`}function Ro(e,t){return e===`running`?`running`:e===`unresponsive`?`attention`:t?.total?t.failed?`failed`:t.not_started||t.partial?`attention`:`done`:`neutral`}var zo={completed:`done`,partial:`attention`,invalid_input:`attention`,skipped:`muted`,timeout:`failed`,max_turns:`failed`,budget:`failed`,context_budget:`failed`,stalled:`failed`,auth_failed:`failed`,api_error:`failed`,rate_limited:`failed`,refused:`failed`,aborted:`failed`,denied:`failed`,error:`failed`,no_output:`failed`,launch_failed:`failed`,invalid_output:`failed`,credential_mismatch:`failed`},Bo=(Object.keys(zo),e=>e!=null&&Object.hasOwn(zo,e));function Vo(e){return Bo(e)?zo[e]:`failed`}function Ho(e){switch(e){case`done`:case`recovered`:return`done`;case`failed`:return`failed`;case`partial`:case`not_started`:return`attention`;case`running`:return`running`;case`waiting`:case`skipped`:return`muted`}}function Uo(e){switch(e){case`valid`:return`done`;case`invalid`:case`failed`:return`failed`;case`refused`:return`attention`;case`running`:return`running`;case`pending`:return`muted`;case null:case void 0:return`neutral`}}var Wo=e=>e===`waiting`?`pending`:Yr(Ho(e));function Z(e,t){return e?Bo(e)?function(e,t){switch(e){case`completed`:return E(`done`,{id:`stop-completed`});case`skipped`:return E(`skipped`);case`partial`:return E(`partly done`,{id:`stop-partial`});case`invalid_input`:{let e=new Set(ze(t).map(e=>e.problem));return e.size===1&&e.has(`missing`)?E(`not started (input missing)`):e.size===1&&e.has(`checks`)?E(`not started (input failed checks)`):e.size===1&&e.has(`failed`)?E(`not started (earlier task failed)`):e.size===2&&e.has(`missing`)&&e.has(`checks`)?E(`not started (input missing and input failed checks)`):E(`not started`,{id:`stop-invalid-input`})}case`invalid_output`:return E(`failed checks`);case`timeout`:return E(`timed out`);case`max_turns`:return E(`turn limit reached`);case`budget`:return E(`cost limit reached`);case`context_budget`:return E(`context limit reached`);case`stalled`:return E(`stalled (no events)`);case`auth_failed`:return E(`authentication failed`);case`api_error`:return E(`API error`);case`rate_limited`:return E(`rate limited`);case`refused`:return E(`refused by the model`);case`aborted`:return E(`aborted`);case`denied`:return E(`permission denied`);case`error`:return E(`error`);case`no_output`:return E(`ended without a result`);case`launch_failed`:return E(`agent session did not start`);case`credential_mismatch`:return E(`wrong identity used`)}}(e,t):E(T`unknown (${e})`):`—`}function Go(e,t,n){return t===`failed`?E(n?T`input ${e} is the output of failed task ${n.name}`:T`input ${e} is the output of a failed task`):t===`checks`?E(n?T`input ${e} from ${n.name} failed checks`:T`input ${e} failed checks`):n?n.outcome===`failed`?E(T`input ${e} is missing because ${n.name} failed`):n.outcome===`not_started`?E(T`input ${e} is missing because ${n.name} did not start`):n.outcome&&g(n.outcome)?E(T`input ${e} from ${n.name} is missing`):E(T`input ${e} is missing because ${n.name} did not finish`):E(T`input ${e} is missing`)}function Ko(e,t,n,r){let i=e.attempts[e.attempts.length-1];if(i?.stop===`invalid_input`){let e=ze(i.reason)[0];if(!e)return w(i.reason,n);let a=e.producer||r?.(e.path)||``,o=a?t.get(a):void 0;return Go(w(e.path,n),e.problem,o?{name:q(o),outcome:o.outcome}:void 0)}let a=e.cause?t.get(e.cause):void 0;return a?E(T`earlier task ${q(a)} failed`):``}var qo=()=>E(`An attempt after a failed attempt (retries)`),Jo=e=>E(T`Attempt ${(e??0)+1}`);function Yo(e){let t=le(e),n=e.map((e,n)=>t[n]?K(Jo(e.attempt),E(`resumed run`)):Jo(e.attempt));return n.map((t,r)=>n.indexOf(t)===n.lastIndexOf(t)?t:K(t,G(e[r]?.ts)))}function Xo(e){return e<=0?``:E(e===1?`1 correction`:T`${e} corrections`)}var Zo=e=>E(T`Pass ${e}`),Qo=e=>E(e<=1?`1 pass`:T`up to ${e} passes`),$o=e=>E(e<=1?`1 pass`:T`${e} passes`),es=e=>e.map(([e,t])=>E(e<=1?T`1 pass: ${t}`:T`${e} passes: ${t}`)).join(` | `),ts=()=>E(`loop`),ns=e=>e?e===`ambient`?E(`default`):e:``,rs=e=>e===`ambient`?E(`local credentials (ambient)`):``,is=e=>e==null?`—`:`${Math.round(e)}%`;function as(e,t){if(!e||e===`allowed`)return``;let n=e.split(`,`),r=n.some(e=>[`rejected`,`exhausted`,`quota`,`blocked`].includes(e))?E(`limit reached`):n.every(e=>[`allowed_warning`,`warning`].includes(e))?E(`near the limit`):E(T`unknown (${e})`);return t?K(r,os(t)):r}function os(e){if(e===`five_hour`)return E(`5-hour`);if(e===`seven_day`)return E(`weekly`);let t=/^(five_hour|seven_day)_(.+)$/.exec(e);return t?t[1]===`five_hour`?E(T`5-hour (${t[2]})`):E(T`weekly (${t[2]})`):e}var ss=e=>E(T`account ${e.slice(0,6)}`),cs=e=>K(E(T`weekly ${is(e.seven_day_pct)}`),E(T`5-hour ${is(e.five_hour_pct)}`));function ls(e){let t=[e.seven_day_resets_at?E(T`Weekly usage ${is(e.seven_day_pct)} (resets ${G(e.seven_day_resets_at,!0)})`):E(T`Weekly usage ${is(e.seven_day_pct)}`),e.five_hour_resets_at?E(T`5-hour usage ${is(e.five_hour_pct)} (resets ${G(e.five_hour_resets_at,!0)})`):E(T`5-hour usage ${is(e.five_hour_pct)}`),...Object.entries(e.windows??{}).filter(([e])=>e!==`five_hour`&&e!==`seven_day`).map(([e,t])=>E(T`${ko(os(e))} usage ${is(t.pct)}`)),E(T`Reported ${G(e.observed_at,!0)}`)],n=as(e.status,e.status_window);return n&&t.push(E(T`Status: ${n}`)),e.threshold_pct!=null&&t.push(E(T`Warning threshold: ${is(e.threshold_pct)}`)),e.overage_status&&t.push(E(T`Extra usage: ${function(e){return e===`allowed`||e===`allowed_warning`?E(`allowed`):e===`rejected`?E(`not allowed`):e}(e.overage_status)}`)),e.account&&t.push(E(T`Account: ${e.account}`)),t.join(`
|
|
295
|
+
`)}var us=e=>K(cs(e),ns(e.credential));function ds(e){let t=e[0];if(!t)return``;let n=e.length-1;return n?K(us(t.last),E(n===1?`1 more account`:T`${n} more accounts`)):cs(t.last)}var fs=e=>e.map(e=>e.credential?`${ns(e.credential)}\n${ls(e.last)}`:ls(e.last)).join(`
|
|
296
|
+
|
|
297
|
+
`);function ps(e,t){return E(e===`seven_day`?T`Weekly usage ${is(t)}`:T`5-hour usage ${is(t)}`)}var ms=e=>e==null?`—`:`${Number(e.toFixed(2))}%`,hs=e=>E(T`limit ${ms(e)}`);function gs(e){return e.rule?E(T`Usage rule: ${e.rule}`):K(ps(e.window??``,e.pct),hs(e.cap),e.until?E(T`until ${G(e.until,!0)}`):``)}var _s=e=>K(E(T`Identity ${ns(e.credential)} paused`),gs(e));function vs(e){let t=new Set;return e.filter(e=>!t.has(e.credential)&&t.add(e.credential))}function ys(e,t=``,n=``){let r=n?n.slice(n.lastIndexOf(`.`)+1):``;switch(e?.cause){case`deadline`:return E(r?T`Past the deadline of ${r}`:`Past the deadline`);case`grace_window`:return E(r?T`Past the deadline of ${r} and its finishing time`:`Past the deadline and its finishing time`);case`cannot_finish`:return K(E(r?T`Cannot finish before the deadline of ${r}`:`Cannot finish before the deadline`),e.need_s==null?``:E(T`needs ${z(e.need_s)}`),e.left_s==null?``:E(T`${z(e.left_s)} left`));case`dependency_not_queued`:return E(`An earlier task was never scheduled`);case`dependency_deferred`:return E(`An earlier task was not run`);case`rest`:{let n=vs(e.rests??[]);return n.length?n.length===1?_s(n[0]):K(_s(n[0]),E(T`+${n.length-1} paused identities`)):t}default:return t}}var bs=e=>E(T`${e.model||e.route||`—`} (identity paused)`);function xs(e){if(!e||e.five_hour_pct==null&&e.seven_day_pct==null)return``;let t=K(e.seven_day_pct==null?``:E(T`weekly ${ms(e.seven_day_pct)}`),e.five_hour_pct==null?``:E(T`5-hour ${ms(e.five_hour_pct)}`));return E(T`Limits: ${t}`)}var Ss=()=>E(`A new agent session on the next model after a failed one (Router hops)`),Cs=e=>e.model||e.route||`—`;function ws(e,t,n){let r=[...new Map((n??[]).map(e=>[e.route||e.model,e])).values()];if(!e||e.length+r.length<2||!e.length)return``;let i=[...r.map(bs),...e.map((t,n)=>n<e.length-1?E(T`${Cs(t)} (${Z(t.stop)})`):Cs(t))].join(` → `);return t==null?i:`${i} | ${z(t)}`}function Ts(e){switch(e){case`valid`:return E(`passed`);case`invalid`:return E(`failed checks`);case`refused`:return E(`not written (task not started)`);case`failed`:return E(`not written (task failed)`);case`running`:return E(`not written yet (task running)`);case`pending`:return E(`not written yet (task waiting)`)}}function Es(e){return e===`failed`?E(`The task failed before it wrote a file that passes its checks`):``}var Ds=()=>E(`Another round in the same agent session after failed checks (rounds)`);function Os(e,t){let n=(e??1)-1;return n<1?``:E(t?n===1?`after 1 correction`:T`after ${n} corrections`:n===1?`1 correction`:T`${n} corrections`)}function ks(e,t,n){let r=e.errors??[],i=ze(`invalid input: ${r.map(e=>e.replace(/^invalid input:\s*/,``)).join(`; `)}`)[0];if(!i)return r[0]?ko(w(r[0],t)):``;let a=n?.(i.path);return ko(Go(w(i.path,t),i.problem,a))}var As=(e,t)=>e.ready?Le(e.journal):t.quota??[],js=e=>E(T`Agent sessions played from the recordings in ${e} (replay)`),Ms=e=>!!e?.replay&&!e.stub,Ns=()=>E(`replayed`),Ps=()=>E(`Played from a recording (replayed)`);function Fs(e){return e?.replay&&Ms(e)?{text:E(`replay and new sessions`),title:(t=e.replay,E(T`Agent sessions played from the recordings in ${t}, and new agent sessions recorded there (replay, record_missing)`))}:e?.replay?{text:E(`replay`),title:js(e.replay)}:e?.stub?{text:E(`stub agent`),title:E(`Tasks played by the stub agent with scripted replies (stub)`)}:null;var t}var Is=()=>E(`no report from host`),Ls=e=>e.up?E(`up`):E(`no report`),Rs=e=>e?.last_seen?E(T`Last report ${G(e.last_seen,!0)}`):``,zs=e=>E(e?T`Host ${e}`:`No host id`),Bs=e=>E(e===1?`1 run`:T`${e} runs`);function Vs(e){let t=e.filter(e=>!e.up).length;return K(e.length===1?E(`1 host`):E(T`${e.length} hosts`),t?E(T`${t} with no report`):``)}var Hs=e=>({empty:e,sortAscending:E(`Sort ascending`),sortDescending:E(`Sort descending`)}),Us=()=>E(`Names this task holds while it runs (claims)`),Ws=()=>E(`A deadline of its own (time_box)`),Gs=()=>E(`Custom column (row_extras)`);function Ks(e){if(e==null||e===``)return`—`;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)??`—`}catch{return`—`}}function qs(e,t){let n=e;return t.filter(e=>n[e]!==null&&n[e]!==void 0&&n[e]!==``).map(e=>[e,Ks(n[e])])}function Js(e){switch(e){case`cost`:return E(`Cost`);case`tokens`:return E(`Tokens`);case`time`:return E(`Time`);case`sessions`:return E(`Agent sessions`)}}function Ys(e){switch(e){case`cost`:return E(`Reported by the coding agent`);case`tokens`:return E(`Input, output, cache read and cache write`);case`time`:return E(`Time of the agent sessions, summed`);case`sessions`:return E(`Agent sessions started on the model`)}}function Xs(e,t){switch(t){case`cost`:return e.cost_usd===null||e.cost_usd===void 0?`—`:Y(e.cost_usd);case`tokens`:return J(Ae(e));case`time`:return z(e.wall_s??0);case`sessions`:return String(e.sessions)}}function Zs(e){let t=100*e;return t>0&&t<.05?`<0.1%`:Math.abs(t)<10?Math.round(10*t)/10+`%`:`${Math.round(t)}%`}var Qs=e=>String(Math.round(100*e)/100);function $s(e){switch(e){case`usd`:return Y;case`pct`:return Zs;case`duration`:return z;case`tokens`:return J;default:return Qs}}function ec(e,t){return e==null||e===``?`—`:t===`datetime`&&typeof e==`string`?G(e,!0)||e:typeof e==`number`?$s(t)(e):typeof e==`boolean`?String(e):typeof e==`string`?e:JSON.stringify(e)}var tc=e=>E(T`Exported ${G(e.exported_at,!0)}`);function nc(e){return e===`transcripts`?E(`transcripts`):e===`processes`?E(`processes`):e}var rc=e=>E(T`Not in this export: ${Mo(e.left_out.map(nc))}`),ic=()=>E(`not in this export`),ac=()=>E(`Trends`),oc=()=>E(`Totals of the runs in a period`);function sc(e,t=jn()){let n=new Date(`${e}T12:00:00Z`);return Number.isNaN(n.getTime())?e:new Intl.DateTimeFormat(t,{month:`short`,day:`numeric`,timeZone:`UTC`}).format(n)}var cc=e=>E(T`${e} days`);function lc(e=jn()){let t=new Intl.DateTimeFormat(e,{weekday:`short`,timeZone:`UTC`});return Array.from({length:7},(e,n)=>t.format(new Date(Date.UTC(2026,9,12+n,12))))}var uc=()=>({runs:E(`Runs`,{id:`trends-runs`}),attempts:E(`Attempts`),done:E(`Done`),cost:E(`Cost`),tokens:E(`Tokens`),time:E(`Time`),costByDay:E(`Cost by day`),costByDayTip:E(`Reported by the coding agent, on the day each attempt ended`),kinds:E(`Kinds`),kind:E(`Kind`),group:E(`Group`),tasks:E(`Tasks`),tasksDone:E(`Tasks done`),partial:E(`Partly done`,{id:`trends-partial`}),medianTime:E(`Median time`),totalTime:E(`Total time`),models:E(`Models`),model:E(`Model`),sessions:E(`Agent sessions`),calls:E(`API calls`),input:E(`Input`),output:E(`Output`),cacheRead:E(`Cache read`),cacheWrite:E(`Cache write`),outcomes:E(`Attempts not done`),outcome:E(`Outcome`),denials:E(`Denied tool calls`),toolCalls:E(`Tool calls`),pythonKinds:E(`Python tasks`),tool:E(`Tool`),usage:E(`Subscription usage`),usageTip:E(`The highest reading of each day`),deferred:E(`Not run`),cause:E(`Cause`),task:E(`Task`),when:E(`When`),rests:E(`Paused identities`),identity:E(`Identity`),event:E(`Event`),starts:E(`Run starts`),startsTip:E(`By weekday and hour, in the period's time zone`),run:E(`Run`),started:E(`Started`),trendPanels:E(`Custom views`)}),dc=(e,t)=>`${e} | ${t}`,fc=e=>{let t=/^(\S+) rests\b/.exec(e)?.[1];return E(t?T`Identity ${t} paused`:`Identity paused`)},pc=(e,t)=>`${e} | ${t}`,mc=e=>e?E(T`Priority ${e}`):``,hc=()=>E(`Tie-breaker in the queue's order (priority)`),gc=()=>E(`Peak context`),_c=()=>E(`Largest input of one API call, cache read and cache write included (peak_context)`);function vc(e){let t=e.usage?.peak_context;return t==null?``:E(T`Peak context: ${function(e,t){let n=t?Math.round(100*e/t):null;return K(J(e),n===null?``:E(T`${n}% of the context limit ${J(t)}`))}(t,e.context_budget)}`)}function yc(e){let t=e.usage?.peak_context,n=e.context_budget;return E(t!=null&&n?T`near the context limit (${Math.round(100*t/n)}%)`:`near the context limit`)}var bc=()=>E(`Peak context above the warning threshold (context_warned)`),xc=(e,t)=>t?`${e} / ${t}`:e,Sc=e=>K(xc(e.agent,e.model),e.credential?E(T`identity ${ns(e.credential)}`):``,e.reason,e.kinds.length?E(T`kinds ${Mo(e.kinds)}`):``),Cc=e=>K(e.kind,`${xc(e.from_agent,e.from_model)} → ${xc(e.to_agent,e.to_model)}`),wc=()=>E(`No available model`),Tc=()=>E(`Must stay unchanged`),Ec=()=>E(`Parts of the output file kept as before the task (preserve)`);function Dc({url:e,failure:t,status:n,type:r}){let i=t===`network`?E(`network error, no response`):t===`status`?E(T`the response status is ${n}`):r.includes(`html`)?E(`the response is HTML, not JSON`):E(`the response is not JSON`);return E(T`No monitor API at ${e}: ${i}`)}function Oc(e,t){let n=q(e),r=w(e.reason,t).slice(0,110);if(e.stop===`invalid_input`)return[`attention`,E(T`${n}: not started`),r];if(ce(e))return[`failed`,E(T`${n}: ${Z(e.stop)}`),r];if(e.stop===`partial`)return[`attention`,E(T`${n}: ${Z(e.stop)}`),r];let i=ws(e.hops,e.wall_s,e.skipped_hops);return i?[`agent`,E(T`${n}: model switch`),i.slice(0,110)]:[`done`,E(T`${n}: done`),K(z(e.wall_s),e.model)]}R(`cae-segmented`,Ei);var kc={done:`✓`,failed:`✕`,attention:`◌`,running:`●`,agent:`✦`},Ac=class extends M{constructor(...e){super(...e),this.toasts=[],this.next=0}static{this.styles=[V,O` :host{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:60;pointer-events:none;}.toast{pointer-events:auto;min-width:240px;max-width:380px;padding:10px 14px;border-radius:11px;background:var(--panel2);border:1px solid var(--line2);box-shadow:0 18px 40px color-mix(in srgb,var(--shadow) 60%,transparent);display:flex;gap:10px;align-items:flex-start;animation:toast-in 0.35s var(--ease) both;}.toast.out{animation:toast-out 0.35s var(--ease) both;}.ti{font-size:16px;line-height:1.2;}b{display:block;font-size:12.5px;}span.sub{font-size:11.5px;color:var(--text-muted);}.ti{color:var(--text-muted);}.toast[data-tone] .ti{color:var(--tone);}.toast[data-tone='failed'],.toast[data-tone='attention']{border-color:color-mix(in srgb,var(--tone) 50%,var(--line2));}.agent .ti{color:var(--agent);}`]}show(e,t,n=``){let r={id:this.next++,kind:e,title:t,sub:n,out:!1};this.toasts=[...this.toasts,r].slice(-4),setTimeout(()=>{this.toasts=this.toasts.map(e=>e.id===r.id?{...e,out:!0}:e),setTimeout(()=>this.toasts=this.toasts.filter(e=>e.id!==r.id),400)},5200)}render(){let e=e=>H(this.toasts.filter(t=>!t.out&&t.kind===`failed`===e),e=>e.id,e=>k`<p>${K(e.title,e.sub)}</p>`);return k`<div class="sr" role="status" aria-live="polite">${e(!1)}</div>
|
|
298
|
+
<div class="sr" role="alert" aria-live="assertive">${e(!0)}</div>
|
|
299
|
+
<div aria-hidden="true" style="display:contents">
|
|
300
|
+
${H(this.toasts,e=>e.id,e=>k`<div class="toast ${e.kind===`agent`?`agent`:``} ${e.out?`out`:``}" data-tone=${e.kind===`agent`?j:e.kind}>
|
|
301
|
+
<span class="ti">${kc[e.kind]}</span>
|
|
302
|
+
<div><b>${e.title}</b>${e.sub?k`<span class="sub">${e.sub}</span>`:j}</div>
|
|
303
|
+
</div>`)}
|
|
304
|
+
</div>`}};U([F()],Ac.prototype,`toasts`,void 0),Ac=U([N(`ca-toasts`)],Ac);var jc=O` :host{display:flex;flex-direction:column;height:100%;min-height:0;font:13px/1.5 var(--sans);color:var(--text);background:var(--backdrop);container:ca-monitor / inline-size;}header{flex:none;display:flex;gap:14px;align-items:center;padding:10px 18px;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--bg) 75%,transparent);backdrop-filter:blur(10px);position:relative;z-index:20;}.brand{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;letter-spacing:0.02em;}.brand{flex:none;max-width:30cqi;white-space:nowrap;}.brand span{overflow:hidden;text-overflow:ellipsis;}.brand svg{width:22px;height:22px;flex:none;}.logo-braces{stroke:var(--text);}.spark-a{stop-color:var(--accent);}.spark-b{stop-color:var(--agent);}.logo-spark{transform-origin:60px 60px;}:host([live]) .logo-spark{animation:core-beat 1.8s var(--ease) infinite;}.runbtn{display:flex;align-items:center;gap:10px;min-width:min(150px,100%);max-width:52cqi;cursor:pointer;padding:6px 13px;border-radius:999px;background:var(--panel);border:1px solid var(--line);color:var(--text);transition:border-color 0.2s,background 0.2s;}.runbtn:hover{border-color:var(--line2);background:var(--panel2);}.rn{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:40%;}.rs{color:var(--text-muted);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.chev{color:var(--text-muted);}.hostchip{flex:none;font-family:var(--mono);font-size:11px;color:var(--text-2);padding:0 7px;border:1px solid var(--line2);border-radius:999px;white-space:nowrap;max-width:24ch;overflow:hidden;text-overflow:ellipsis;}.runbtn .pill{flex:none;font-size:11px;}ca-run-picker{inset-inline-start:110px;}.hdr-right{margin-left:auto;display:flex;align-items:center;gap:12px;flex:none;white-space:nowrap;}.nowline{font-size:12px;color:var(--text-2);white-space:nowrap;overflow:hidden;max-width:40cqi;display:inline-flex;align-items:center;gap:4px;}.clock{font-family:var(--mono);font-size:11.5px;color:var(--text-muted);}.langs{--cae-segmented-radius:999px;--cae-segmented-height:auto;--cae-segmented-padding:2px 9px;--cae-segmented-font-size:11px;--cae-segmented-divider:0;--cae-segmented-hover:var(--text-2);}.live-dot{width:9px;height:9px;border-radius:50%;background:var(--status-running);display:inline-block;animation:breathe 1.8s ease-in-out infinite;}.live-dot.off{background:var(--line2);animation:none;box-shadow:none;}.bar{flex:none;display:flex;gap:8px;padding:8px 18px;border-top:1px solid var(--line);align-items:center;flex-wrap:wrap;}.bar select,.bar input{background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:5px 9px;outline:none;font:inherit;font-size:12px;}.bar input:focus,.bar select:focus{border-color:var(--focus);box-shadow:0 0 0 calc(var(--focus-width) - 2px) var(--focus);}.api-error{flex:none;margin:0;padding:8px 18px;color:var(--status-failed);font:12px var(--mono);overflow-wrap:anywhere;}.api-error:empty{padding:0;}main{border-top:1px solid var(--line);flex:1 1 auto;min-height:0;overflow:auto;padding:16px 18px 48px;}main.stream{display:flex;flex-direction:column;overflow:hidden;padding-bottom:16px;}@container ca-monitor (max-width:1000px){header{flex-wrap:wrap;row-gap:8px;}}@container ca-monitor (max-width:760px){header{gap:8px;padding:8px 12px;}.runbtn{flex:1 1 0;min-width:0;max-width:none;}ca-run-picker{inset-inline:16px;width:auto;}.hdr-right{width:100%;margin-left:0;flex-wrap:wrap;row-gap:6px;}.nowline{max-width:none;flex:1 1 100%;}main{padding:12px 12px 40px;}.bar{padding:8px 12px;}.bar input{flex:1 1 10em;min-width:0;}}@container ca-monitor (max-width:420px){.brand{max-width:40cqi;}.runbtn{padding:6px 10px;gap:8px;}}`;function Mc(e){return[...[{id:`overview`,label:E(`Overview`),icon:`◎`},{id:`tasks`,label:E(`Tasks`,{id:`tab-tasks`}),icon:`≡`},{id:`journal`,label:E(`History`),icon:`▤`,tip:`journal.jsonl`},{id:`outputs`,label:E(`Outputs`),icon:`▣`},{id:`definitions`,label:E(`Definitions`),icon:`⌘`},{id:`procs`,label:E(`Processes`),icon:`⚙`},{id:`stream`,label:E(`Task detail`),icon:`✦`}].map(e=>({...e,panel:!1})),...e.filter(ge).map(e=>({id:`panel:${e.name}`,label:e.title||e.name,icon:e.icon||`▤`,tip:e.description?E(T`${e.description} (custom view)`):E(`Custom view`),panel:!0}))]}var Nc=e=>`tab-${e}`;function Pc(e){let t=e.querySelector(`.tab.sel`),n=e.querySelector(`.tab-ind`);if(!t||!n)return;n.style.left=`${t.offsetLeft+10}px`,n.style.width=`${Math.max(12,t.offsetWidth-20)}px`,n.classList.contains(`init`)&&requestAnimationFrame(()=>n.classList.remove(`init`));let r=n.parentElement;r&&n.dataset.tab!==t.id&&(n.dataset.tab=t.id,t.offsetLeft-24<r.scrollLeft?r.scrollLeft=Math.max(0,t.offsetLeft-24):t.offsetLeft+t.offsetWidth+24>r.scrollLeft+r.clientWidth&&(r.scrollLeft=t.offsetLeft+t.offsetWidth+24-r.clientWidth))}var Fc=O` nav{flex:none;display:flex;gap:2px;padding:6px 18px 0;position:relative;overflow-x:auto;scrollbar-width:none;align-items:center;--shade:color-mix(in srgb,var(--text) 22%,transparent);background:linear-gradient(to right,var(--backdrop) 40%,transparent) left / 32px 100% no-repeat local,linear-gradient(to left,var(--backdrop) 40%,transparent) right / 32px 100% no-repeat local,radial-gradient(farthest-side at 0 50%,var(--shade),transparent) left / 12px 100% no-repeat scroll,radial-gradient(farthest-side at 100% 50%,var(--shade),transparent) right / 12px 100% no-repeat scroll;}nav::-webkit-scrollbar{display:none;}.tabs{flex:none;display:flex;gap:2px;align-items:center;}.tab{position:relative;background:none;border:none;padding:8px 14px 11px;color:var(--text-muted);cursor:pointer;font-weight:500;white-space:nowrap;transition:color 0.2s;}.tab:hover{color:var(--text-2);}.tab.sel{color:var(--text);font-weight:600;}.tab-label{display:inline-flex;flex-direction:column;}.tab-label::after{content:attr(data-label);font-weight:600;height:0;overflow:hidden;visibility:hidden;}.tab-ic{opacity:0.55;margin-right:6px;font-size:12px;}.tab.sel .tab-ic{opacity:1;color:var(--accent);}.badge{margin-left:6px;font-size:10px;font-weight:500;padding:0 6px;border-radius:999px;background:var(--raise);color:var(--text-2);font-variant-numeric:tabular-nums;}.badge[data-tone]{background:var(--tone-bg);color:var(--tone);}.tab-sep{width:1px;height:18px;background:var(--line2);margin:0 8px 3px;flex:none;align-self:center;}.tab-ind{position:absolute;bottom:0;left:0;width:0;height:2px;border-radius:2px;background:var(--accent);transition:left 0.3s var(--ease),width 0.3s var(--ease);}.tab-ind.init{transition:none;}.tabhint{margin-left:auto;padding-left:12px;white-space:nowrap;}@container ca-monitor (max-width:900px){.tabhint{display:none;}}@container ca-monitor (max-width:760px){nav{padding:4px 8px 0;}.tab{padding:8px 10px 11px;}}`;function Q(e,t,n,{bubbles:r=!0}={}){e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:r,composed:!0}))}function Ic(e,t,n){return n.key?k`<button type="button" class="taskchip" title=${n.key} @click=${t=>{t.stopPropagation(),Q(e,`ca-open-task`,{key:n.key,...C(n)?{view:`output`}:{}})}}>${t}</button>`:k`<span class="taskchip">${t}</span>`}function Lc(e,t){return e.startsWith(`list[`)||e===`array`?Array.isArray(t):e===`string`?typeof t==`string`:e===`integer`?Number.isInteger(t):e===`number`?typeof t==`number`:e===`boolean`?typeof t==`boolean`:e!==`object`||typeof t==`object`&&!!t&&!Array.isArray(t)}R(`cae-check-table`,Aa);var Rc=e=>/^RootModel\[(.+)\]$/.exec(e)?.[1]??null;function zc(e){let t=e.file.content;return e.file.exists&&typeof t==`object`&&t&&!Array.isArray(t)?t:null}function Bc(e){if(!e.fields.length&&(e.schema_name===`text`||Rc(e.schema_name)!==null))return null;let t=zc(e),n=e.fields.map(e=>{let n={name:e.name,expected:e.type,optional:!e.required};if(!t)return{...n,hasValue:!1,verdict:`none`,verdictLabel:``};if(!(e.name in t))return e.required?{...n,hasValue:!1,verdict:`fail`,verdictLabel:E(`missing`),tip:E(`A required field that is not in the file`)}:{...n,hasValue:!1,verdict:`none`,verdictLabel:E(`absent (optional)`)};let r=t[e.name];return Lc(e.type,r)?{...n,hasValue:!0,value:r,verdict:`pass`,verdictLabel:E(`passed`)}:{...n,hasValue:!0,value:r,verdict:`fail`,verdictLabel:E(`wrong type`),tip:E(T`Expected ${e.type}`)}}),r=t?Object.keys(t).filter(t=>!e.fields.some(e=>e.name===t)):[];return[...n,...r.map(e=>({name:e,expected:E(`not in the schema`),extra:!0,hasValue:!0,value:t?.[e],verdict:`warn`,verdictLabel:E(`extra field`),tip:E(`Not in the schema`)}))]}function Vc(){return{name:E(`Field`),expected:E(`Expected`),actual:E(`In the file`),verdict:E(`Check`),optional:E(`optional`),items:e=>E(e===1?`1 item`:T`${e} items`),object:E(`object`)}}function Hc(e){let t=!!e.file.exists;return $r(`ct-chip`,{text:t?E(`found`):e.required?E(`missing (required)`):E(`missing (optional)`),tone:t?`done`:e.required?`failed`:`muted`})}function Uc(e,t){return $r(`ct-chip`,e?{text:t===void 0?Ts(e):k`${Ts(e)} <b>${t}</b>`,tone:Uo(e),title:Es(e)}:{text:`—`})}function Wc(e){let t=e.file,n=Bc(e),r=k`<details class="ct-raw">
|
|
305
|
+
<summary>${Gc(t)}</summary>
|
|
306
|
+
${function(e){let t=e.content;return typeof t==`object`&&t?k`<cae-json-tree .value=${t}></cae-json-tree>`:k`<pre class="jtree">${typeof t==`string`?t:E(`Not JSON`)}</pre>`}(t)}
|
|
307
|
+
</details>`;return n?t.exists?k`<cae-check-table .rows=${n} .strings=${Vc()}></cae-check-table>
|
|
308
|
+
${zc(e)?j:k`<div class="meta note">${E(`Not a JSON object`)}</div>`}
|
|
309
|
+
${r}`:n.length?k`<cae-check-table .rows=${n} .showValues=${!1} .strings=${Vc()}></cae-check-table>`:k``:t.exists?r:k``}R(`cae-json-tree`,Di);var Gc=e=>K(E(`Whole file`),`${e.size??0} B`,e.mtime?E(T`written ${G(e.mtime,!0)}`):``,e.truncated?E(`truncated`):``);function Kc(e){let t=e.schema_ref||e.schema_name;if(e.schema_name===`text`)return E(`text file`);let n=Rc(e.schema_name);return n===`str`?k`<span title=${t}>${E(`text (JSON string)`)}</span>`:n?k`<span title=${t}>${E(T`JSON value of type ${n}`)}</span>`:E(k`JSON object, schema ${function(e){let t=Rc(e.schema_name),n=e.schema_name===`text`||t===`str`?E(`text`):t??e.schema_name;return k`<b class="jmono" title=${e.schema_ref||e.schema_name}>${n}</b>`}(e)}`)}function qc(e,t){let n=Kc(e),r=function(e){let t=e.validators??[];if(!t.length)return null;let n=(e.errors??[]).join(`
|
|
310
|
+
`);return k`${t.map((t,r)=>k`${r?`, `:``}<span class="jmono">${t}</span> ${(t=>e.status===`valid`?Oa(`pass`,E(`passed`)):n.includes(t)?Oa(`fail`,E(`failed checks`)):j)(t)}`)}`}(e);return k`<dl class="conds">
|
|
311
|
+
${(t===`output`?[[E(`Format`),n],...r?[[E(`Other checks`),r,E(`Checks beyond the schema (validators)`)]]:[],[E(`Must be written during the task`),e.fresh?E(`yes`):E(`no`),e.fresh?E(`A file from before the task does not count`):E(`A file from before the task counts`)],...e.preserve?.length?[[Tc(),k`<span class="jmono">${e.preserve.join(`, `)}</span>`,Ec()]]:[]]:[[E(`Format`),n],...r?[[E(`Other checks`),r,E(`Checks beyond the schema (validators)`)]]:[],[E(`Check time`),E(`when the task starts`)],[E(`Required`),e.required?E(`yes`):E(`no`)]]).map(([e,t,n])=>k`<dt>${e}</dt><dd title=${n??``}>${t}</dd>`)}
|
|
312
|
+
</dl>`}var Jc=O` .ct-chip{display:inline-block;padding:1px 10px;border-radius:var(--radius-pill);font-size:11.5px;background:var(--raise);color:var(--text-2);white-space:nowrap;}.ct-chip b{margin-left:4px;}.ct-chip[data-tone]{background:var(--tone-bg);color:var(--tone);}.ct-chip[data-tone='done']{background:none;box-shadow:inset 0 0 0 1px var(--line2);color:var(--text-2);}`,Yc=O` ${Jc} ${Ea} .ct-path{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.ct-lead{margin:2px 0 8px;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 6px;}.conds{display:grid;grid-template-columns:fit-content(50%) minmax(0,1fr);gap:2px 14px;margin:2px 0 10px;font-size:12px;}.conds dt{color:var(--text-muted);overflow-wrap:anywhere;}.conds dd{margin:0;color:var(--text-2);min-width:0;overflow-wrap:anywhere;}.note{margin-top:6px;}.ct-raw{margin-top:8px;}.ct-raw>summary{cursor:pointer;color:var(--text-muted);font-size:12px;}.ct-err{color:var(--status-failed);white-space:pre-wrap;}.ct-fields{border-collapse:collapse;width:100%;}.ct-fields td{padding:2px 10px 2px 0;border:0;font-size:12px;}.ct-in{display:flex;align-items:center;gap:10px;padding:5px 4px;border-top:1px solid var(--line);}h4{margin:8px 0 6px;font-size:12px;color:var(--text-2);font-weight:600;}.io-card{border:1px solid var(--line);border-radius:10px;padding:10px 14px;margin-bottom:10px;background:var(--raise);}.io-hd{display:flex;align-items:center;gap:10px;margin-bottom:6px;}.io-from{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin:-2px 0 8px;}.io-hd .ct-path{flex:1;}.io-card.one .io-hd{margin-bottom:2px;}`;R(`cae-count`,Hi),R(`cae-elapsed`,Ui);var Xc=class extends M{constructor(...e){super(...e),this.procs=null}static{this.styles=[V,O` :host{display:block;}.ptree2{font-family:var(--mono);font-size:11.5px;max-height:220px;overflow:auto;}.pt-n{display:flex;gap:10px;align-items:center;padding:3px 6px 3px calc(6px + var(--d) * 18px);border-radius:6px;position:relative;}.pt-n:hover{background:color-mix(in srgb,var(--text) 4%,transparent);}.pt-n::before{content:'';position:absolute;left:calc(var(--d) * 18px - 8px);top:0;bottom:50%;width:8px;border-left:1px solid var(--line2);border-bottom:1px solid var(--line2);}.pt-n.root::before{display:none;}.pt-pid{color:var(--text-muted);min-width:58px;}.pt-cmd{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;color:var(--text-2);}.pt-n.llm .pt-cmd{color:var(--text);}.pt-n.llm .pt-pid{box-shadow:inset 2px 0 0 color-mix(in srgb,var(--agent) 70%,transparent);padding-left:6px;}.pt-age{color:var(--text-muted);}`]}render(){let e=this.procs?.tree[0];return e?k`<div class="ptree2">${this.node(e,0)}</div>`:k`<div class="meta">${E(`No running processes`)}</div>`}node(e,t){let n=e.full_cmd||e.cmd||``,r=(e.cmd||n).split(` `).slice(0,3).join(` `);return k`<div class="pt-n ${/\b(claude|omp)\b/.test(n)?`llm`:``} ${t?``:`root`}" style="--d:${t}" title=${n}>
|
|
313
|
+
<span class="pt-pid">${e.pid}</span>
|
|
314
|
+
<span class="pt-cmd">${e.key?k`<b>${q(e)}</b> `:j}${r.length>70?`${r.slice(0,70)}…`:r}</span>
|
|
315
|
+
<cae-elapsed class="pt-age" .since=${Ir.at(`p:${e.pid}`,e.age_s)}></cae-elapsed>
|
|
316
|
+
</div>
|
|
317
|
+
${(e.children??[]).map(e=>this.node(e,t+1))}`}};function Zc(e){let t=e.filter(f),n=t.filter(C),r=t.filter(e=>!C(e)),i=e=>e.reduce((e,t)=>e+(t.wall_s||0),0),a=e=>[...new Set(e.map(e=>e.key))],o=e=>a(e).length,s=m(e),c=t.filter(e=>(e.rounds||1)>1),l=t.filter(e=>(e.hops||[]).length>1);return{attempts:t.length,python:n.length,launches:r.length,bad:t.filter(e=>!e.ok).length,launchWall:i(r),pythonWall:i(n),retries:s.length,retriedTasks:o(s),retriedKeys:a(s),fixupKeys:a(c),fixups:c.reduce((e,t)=>e+(t.rounds||1)-1,0),fixupTasks:o(c),switches:l.reduce((e,t)=>e+(t.hops||[]).length-1,0),switchTasks:o(l)}}function Qc(e){return e.startsWith(`task:`)?{key:e.slice(5)}:{stop:e.replace(/^history:/,``)}}function $c(e){let t=!1,n=!1,r=!1;for(let i of e){if(i.outcome!==`not_started`)continue;let e=i.attempts[i.attempts.length-1],a=e?.stop===`invalid_input`?ze(e.reason):[];a.some(e=>e.problem===`missing`)&&(t=!0),a.some(e=>e.problem===`checks`)&&(n=!0),(a.some(e=>e.problem===`failed`)||!a.length&&i.cause)&&(r=!0)}return Ao(r?E(`Earlier task failed`):``,t?E(`Input missing`):``,n?E(`Input failed checks`):``)}U([P({attribute:!1})],Xc.prototype,`procs`,void 0),Xc=U([N(`ca-proc-tree`),D()],Xc),R(`cae-stat-tiles`,Xi),R(`cae-count`,Hi);var el=(e,t)=>({id:`history:${e}`,label:t});function tl(e,t,n,r){let i=t.length===1?t[0]:void 0;if(!i)return el(n,r);let a=e.find(e=>e.key===i);return{id:`task:${i}`,label:a?q(a):i}}function nl(e,t){let n=Zc(e),{outcomes:r,counts:i}=t,a=[{text:X(`done`,i.doneTotal),tone:`neutral`},{text:i.skipped?X(`skipped`,i.skipped):``,tone:`neutral`},{text:i.failed?X(`failed`,i.failed):``,tone:Lo(i.failed,`failed`)},{text:i.not_started?X(`not_started`,i.not_started):``,tone:Lo(i.not_started,`attention`)},{text:i.partial?X(`partial`,i.partial):``,tone:Lo(i.partial,`attention`)}];return[{id:`tasks`,label:E(`Tasks`,{id:`tasks`}),value:i.total,sub:[a]},{id:`attempts`,label:E(`Attempts`),value:n.attempts,sub:[Ao(n.launches===1?E(`1 agent session`):E(T`${n.launches} agent sessions`),n.python===1?E(`1 Python task attempt`):E(T`${n.python} Python task attempts`))],tip:E(`Attempts that ran, retries included (journal.jsonl)`)},...rl(e),{id:`bad`,tone:Lo(n.bad,`failed`),label:E(`Failed attempts`),value:n.bad,sub:[n.bad?[]:[E(`All attempts done`)]],...n.bad?{action:el(`bad`,E(`Failed attempts in history`))}:{}},{id:`notstarted`,tone:Lo(i.not_started,`attention`),label:E(`Not started`),value:i.not_started,sub:[i.not_started?$c(r.values()):[E(`All tasks started`)]],...i.not_started?{action:el(`invalid_input`,E(`Tasks not started in history`))}:{}},{id:`wall`,label:E(`Agent session time`),value:z(n.launchWall),sub:[[E(T`Python tasks: ${z(n.pythonWall)}`)]],tip:E(`Summed over agent sessions, including sessions that ran at once`)},{id:`retry`,label:E(`Retries`),value:n.retries,sub:[[n.retries?n.retriedTasks===1?E(`1 task retried`):E(T`${n.retriedTasks} tasks retried`):E(`No retries`)]],tip:qo(),...n.retries?{action:tl(e,n.retriedKeys,`retried`,E(`Retried tasks in history`))}:{}},{id:`ct`,label:E(`Corrections`),value:n.fixups,sub:[[n.fixups?n.fixupTasks===1?E(`1 task with a correction`):E(T`${n.fixupTasks} tasks with corrections`):E(`No corrections`)]],tip:Ds(),...n.fixups?{action:tl(e,n.fixupKeys,`fixup`,E(`Attempts with corrections in history`))}:{}},{id:`fo`,label:E(`Model switches`),value:n.switches,sub:[[n.switches?n.switchTasks===1?E(`1 task with a model switch`):E(T`${n.switchTasks} tasks with model switches`):E(`No model switches`)]],tip:Ss()}]}function rl(e){let t=De(e);if(!t)return[];let n=ke(e)[0];return[{id:`cost`,label:E(`Cost`),value:Y(t.cost),sub:n&&n.share!==null?[[E(T`Highest cost: ${n.kind}`)],Ao(Y(n.spend.cost),E(T`${Math.round(100*n.share)}% of the total`))]:[[]],tip:E(`Reported by the coding agent`)},{id:`tokens`,label:E(`Tokens`),value:J(Te(t)),sub:[Ao(E(T`${J(t.input)} input`),E(T`${J(t.output)} output`),E(T`${J(t.cache_read+t.cache_creation)} cache`))],tip:K(E(T`${J(t.cache_read)} cache read`),E(T`${J(t.cache_creation)} cache write`),t.calls===1?E(`1 API call`):E(T`${t.calls} API calls`))}]}var il=class extends M{constructor(...e){super(...e),this.journal=[],this.plan={nodes:[],groups:[]},this.onAction=e=>{e.stopPropagation();let t=Qc(e.detail.action);`key`in t?Q(this,`ca-open-task`,{key:t.key}):Q(this,`ca-navigate`,{tab:`journal`,stop:t.stop})}}static{this.styles=O` :host{display:block;}`}render(){return k`<cae-stat-tiles exportparts="tiles, tile, label, value, sub, action" .tiles=${nl(this.journal,S(this.journal,this.plan))} @cae-action=${this.onAction}></cae-stat-tiles>`}};U([P({attribute:!1})],il.prototype,`journal`,void 0),U([P({attribute:!1})],il.prototype,`plan`,void 0),il=U([N(`ca-kpis`),D()],il);var al=[`input`,`cache_read`,`cache_creation`,`output`],ol=class extends M{constructor(...e){super(...e),this.journal=[],this.top=5}static{this.styles=[V,oi,O` :host{display:block;}.kinds{display:grid;grid-template-columns:minmax(70px,max-content) minmax(0,420px) max-content max-content;justify-content:start;gap:8px 14px;align-items:center;}.kind{font-family:var(--mono);font-size:12px;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.bar{display:flex;height:12px;border-radius:4px;overflow:hidden;background:var(--track);}.bar i{display:block;height:100%;}.num{font-variant-numeric:tabular-nums;text-align:right;font-size:12px;white-space:nowrap;}.share{color:var(--text-muted);min-width:3.5em;}.seg-input{background:var(--tok-input);}.seg-cache_read{background:var(--tok-cache-read);}.seg-cache_creation{background:var(--tok-cache-write);}.seg-output{background:var(--tok-output);}.legend{margin-top:10px;}h4{margin:16px 0 6px;font-size:12px;color:var(--text-2);font-weight:600;}.top{display:grid;grid-template-columns:minmax(0,max-content) 64px 64px max-content;column-gap:20px;row-gap:4px;align-items:baseline;}.top a{font-family:var(--mono);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}`]}partLabel(e){switch(e){case`input`:return E(`input`);case`cache_read`:return E(`cache read`);case`cache_creation`:return E(`cache write`);case`output`:return E(`output`)}}bar(e,t){let n=Te(e),r=t?100*n/t:0;return k`<div class="bar" title=${K(...al.map(t=>`${this.partLabel(t)} ${J(e[t])}`))} style="width:${Math.max(r,.5).toFixed(2)}%">
|
|
318
|
+
${al.map(t=>e[t]&&n?k`<i class="seg-${t}" style="width:${(100*e[t]/n).toFixed(2)}%"></i>`:j)}
|
|
319
|
+
</div>`}render(){if(!De(this.journal))return k`<div class="meta">${E(`No tokens reported`)}</div>`;let e=ke(this.journal),t=Math.max(1,...e.map(e=>Te(e.spend))),n=(r=this.journal,Oe(r,e=>e.key)).slice(0,this.top);var r;return k`<div class="kinds">
|
|
320
|
+
${H(e,e=>e.id,e=>k`<span class="kind" title=${e.id}>${e.id}</span>${this.bar(e.spend,t)}
|
|
321
|
+
<span class="num">${K(J(Te(e.spend)),Y(e.spend.cost))}</span>
|
|
322
|
+
<span class="num share">${e.share===null?``:`${Math.round(100*e.share)}%`}</span>`)}
|
|
323
|
+
</div>
|
|
324
|
+
${ai(al.map(e=>({label:this.partLabel(e),cls:`seg-${e}`})))}
|
|
325
|
+
<h4>${E(`Most expensive tasks`)}</h4>
|
|
326
|
+
<div class="top">
|
|
327
|
+
${n.map(e=>k`<a class="lnk" href="#" title=${e.id} @click=${t=>{t.preventDefault(),Q(this,`ca-open-task`,{key:e.id})}}>${q(e)}</a>
|
|
328
|
+
<span class="num">${J(Te(e.spend))}</span>
|
|
329
|
+
<span class="num">${Y(e.spend.cost)}</span>
|
|
330
|
+
<span class="num share">${e.share===null?``:E(T`${Math.round(100*e.share)}%`)}</span>`)}
|
|
331
|
+
</div>`}};U([P({attribute:!1})],ol.prototype,`journal`,void 0),U([P({type:Number})],ol.prototype,`top`,void 0),ol=U([N(`ca-spend-breakdown`),D()],ol);var sl=6,cl=`var(--meter)`,ll=e=>`${e.agent}/${e.model}`;function ul(e){let t=e.length>6?5:6;return new Map(e.map((e,n)=>[ll(e),n<t?`var(--series-${n+1})`:cl]))}function dl(e,t){let n=ul(e),r=[],i=0;for(let a of e){let e=je(a,t)??0,o=n.get(ll(a));o===`var(--meter)`?i+=e:r.push({id:ll(a),label:a.model,value:e,color:o,text:Xs(a,t)})}return e.length>6&&r.push({id:`other`,label:E(`Other models`),value:i,color:cl}),r}function fl(e,t){let n=ul(e),r=e.map(e=>je(e,t)??0),i=si(r),a=r.some(e=>e>0);return e.map((e,t)=>({id:ll(e),usage:e,colour:n.get(ll(e)),share:a?ci(i[t],r[t]):`—`}))}var pl=[`cost`,`tokens`,`time`,`sessions`],ml=class extends M{constructor(...e){super(...e),this.models=[],this.measure=``}static{this.styles=[V,li,O` :host{display:block;}.head{display:flex;justify-content:flex-end;margin-bottom:10px;overflow-x:auto;}.head cae-segmented{flex:none;}.wrap{overflow-x:auto;margin-top:14px;border-radius:6px;}.wrap:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}table{border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums;}th{font-weight:500;color:var(--text-muted);text-align:right;padding:0 0 6px 28px;white-space:nowrap;border-bottom:1px solid var(--line);}th:first-child{text-align:left;padding-left:0;}th.on{color:var(--text);font-weight:600;}td{padding:7px 0 7px 28px;text-align:right;white-space:nowrap;color:var(--text-2);vertical-align:top;}tr + tr td{border-top:1px solid var(--line);}td:first-child{text-align:left;padding-left:0;}td.on{color:var(--text);}td.share{color:var(--text);font-weight:600;}.model{display:grid;grid-template-columns:10px max-content;column-gap:8px;align-items:baseline;}.model i{width:10px;height:10px;border-radius:3px;align-self:center;}.model b{font-family:var(--mono);font-weight:500;color:var(--text);}.model small{grid-column:2;font-size:11px;color:var(--text-muted);}`]}chosen(){let e=Me(this.models);return this.measure&&e.includes(this.measure)?this.measure:e[0]??`sessions`}render(){if(!this.models.length)return k`<div class="meta">${E(`No agent sessions`)}</div>`;let e=this.chosen(),t=Me(this.models),n=fl(this.models,e),r=this.models.some(e=>e.peak_context!=null);return k`${t.length>1?k`<div class="head">
|
|
332
|
+
<cae-segmented label=${E(`Measure`)} .value=${e} .options=${t.map(e=>({value:e,label:Js(e),title:Ys(e)}))} @cae-change=${e=>this.measure=e.detail.value}></cae-segmented>
|
|
333
|
+
</div>`:j}
|
|
334
|
+
${function(e,t={}){let n=e.filter(e=>e.value>0),r=si(n.map(e=>e.value)),i=n.reduce((e,t)=>e+t.value,0),a=t.labelAt??.15,o=(e,t)=>[e.label,ci(r[t],e.value),e.text].filter(Boolean).join(` | `);return k`<div class="share" part="share">
|
|
335
|
+
<div class="share-bar" role="list" aria-label=${t.label||j}>
|
|
336
|
+
${n.map((e,t)=>k`<span class="share-seg" role="listitem" tabindex="0" aria-label=${o(e,t)} data-id=${e.id} data-edge=${t===0?`start`:t===n.length-1?`end`:j} style=${ii({flexGrow:String(e.value/i),background:e.color})} ><span class="share-tip" aria-hidden="true">${o(e,t)}</span></span>`)}
|
|
337
|
+
</div>
|
|
338
|
+
<div class="share-names" aria-hidden="true">
|
|
339
|
+
${n.map((e,t)=>k`<span style=${ii({flexGrow:String(e.value/i)})} >${e.value/i>=a?k`<b>${e.label}</b> ${ci(r[t],e.value)}`:j}</span>`)}
|
|
340
|
+
</div>
|
|
341
|
+
</div>`}(dl(this.models,e),{label:Js(e)})}
|
|
342
|
+
<div class="wrap" data-scroll="x" tabindex="0" role="region" aria-label=${E(`Models`)}>
|
|
343
|
+
<table>
|
|
344
|
+
<thead>
|
|
345
|
+
<tr>
|
|
346
|
+
<th scope="col">${E(`Model`)}</th>
|
|
347
|
+
<th scope="col" class="on" title=${Js(e)}>${E(`Share`)}</th>
|
|
348
|
+
${pl.map(t=>k`<th scope="col" class=${t===e?`on`:j} title=${Ys(t)}>${Js(t)}</th>`)}
|
|
349
|
+
<th scope="col">${E(`API calls`)}</th>
|
|
350
|
+
${r?k`<th scope="col" title=${_c()}>${gc()}</th>`:j}
|
|
351
|
+
</tr>
|
|
352
|
+
</thead>
|
|
353
|
+
<tbody>
|
|
354
|
+
${H(n,e=>e.id,t=>k`<tr>
|
|
355
|
+
<td>
|
|
356
|
+
<span class="model"><i style=${ii({background:t.colour})}></i><b>${t.usage.model}</b><small>${t.usage.agent}</small></span>
|
|
357
|
+
</td>
|
|
358
|
+
<td class="share">${t.share}</td>
|
|
359
|
+
${pl.map(n=>k`<td class=${n===e?`on`:j}>${Xs(t.usage,n)}</td>`)}
|
|
360
|
+
<td>${t.usage.calls??0}</td>
|
|
361
|
+
${r?k`<td>${t.usage.peak_context==null?`—`:J(t.usage.peak_context)}</td>`:j}
|
|
362
|
+
</tr>`)}
|
|
363
|
+
</tbody>
|
|
364
|
+
</table>
|
|
365
|
+
</div>`}};U([P({attribute:!1})],ml.prototype,`models`,void 0),U([F()],ml.prototype,`measure`,void 0),ml=U([N(`ca-model-usage`),D()],ml);var hl=class extends M{static{this.styles=[V,O` :host{display:block;container-type:inline-size;}.rows{display:grid;grid-template-columns:max-content minmax(70px,420px) max-content max-content;justify-content:start;gap:10px 14px;align-items:center;}.name{font-size:12px;color:var(--text-2);white-space:nowrap;}.bar{position:relative;height:12px;border-radius:4px;background:var(--track);overflow:hidden;}.bar i{position:absolute;top:0;bottom:0;}.bar .before{left:0;background:var(--meter);opacity:0.45;}.bar .during{background:var(--meter);}.bar.hot .during,.bar.full .during,.bar.hot .before,.bar.full .before{background:var(--status-attention);}.bar .cap{width:2px;margin-left:-1px;background:var(--text);opacity:0.7;}.val.hot b,.val.full b{color:var(--status-attention);}.val{font-family:var(--mono);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap;}.val b{color:var(--text);}.val .lim{color:var(--text-muted);}.reset{font-size:11.5px;color:var(--text-muted);white-space:nowrap;}@container (max-width:460px){.rows{grid-template-columns:max-content minmax(70px,1fr) max-content;row-gap:2px;}.reset{grid-column:2 / -1;margin-bottom:6px;}}.status{margin-top:8px;}.acct{padding:10px 0;border-top:1px solid var(--line);}.acct:first-child{border-top:0;padding-top:0;}.acct-h{display:flex;align-items:baseline;flex-wrap:wrap;gap:8px;margin-bottom:8px;font-size:12px;}.acct-h i{font-style:normal;color:var(--text-muted);font-size:11px;}.acct-h b{font-family:var(--mono);color:var(--text);font-weight:600;}.rests{margin:8px 0 0;padding:0;list-style:none;font-size:11.5px;color:var(--text-2);}.rests li{padding:2px 0;}.rule{margin-bottom:10px;font-size:12px;color:var(--text-2);}.rule code{font-family:var(--mono);color:var(--text);}`]}constructor(){super(),this.journal=[],this.accounts=null,this.caps=[],this.rests=[],this.rule=``,this.live=!1,new Fr(this)}row(e,t,n,r,i){let a=n[`${e}_pct`],o=r[`${e}_pct`];if(a==null&&o==null)return j;let s=Math.max(0,Math.min(100,a??o??0)),c=Math.max(s,Math.min(100,o??s)),l=r[`${e}_resets_at`],u=c>=100||i!=null&&c>=i?`full`:c>=80?`hot`:``,d=i==null?``:hs(i);return k`<span class="name">${t}</span>
|
|
366
|
+
<span class="bar ${u}" title=${d?`${is(a)} → ${is(o)} | ${d}`:`${is(a)} → ${is(o)}`}>
|
|
367
|
+
<i class="before" style="width:${s}%"></i>
|
|
368
|
+
<i class="during" style="left:${s}%;width:${c-s}%"></i>
|
|
369
|
+
${i==null?j:k`<i class="cap" style="left:${Math.min(100,i)}%" aria-hidden="true"></i>`}
|
|
370
|
+
</span>
|
|
371
|
+
<span class="val ${u}">${is(a)} → <b>${is(o)}</b>${d?k` <span class="lim">| ${d}</span>`:j}</span>
|
|
372
|
+
<span class="reset" title=${l?G(l,!0):``}>${function(e,t=Date.now()){let n=Date.parse(e??``);if(Number.isNaN(n))return``;if(n<=t)return E(`reset`);let r=(n-t)/36e5,i=r>=48?E(T`${Math.floor(r/24)}d ${Math.floor(r%24)}h`):z((n-t)/1e3);return E(T`resets in ${i}`)}(l)}</span>`}paused(e){let t=Date.now(),n=e.find(e=>!e.ended&&(e.until?Date.parse(e.until)>t:this.live));return n?Zr({text:n.until?E(T`paused until ${G(n.until,!0)}`):E(`paused`),tone:`attention`,title:gs(n)}):j}render(){let e=this.accounts??Le(this.journal);if(!e.length&&!this.rests.length)return j;let t=new Map(this.caps.map(e=>[e.credential,e]));return k`${this.rule?k`<div class="rule" title="quota_rule">${E(`Usage rule`)} <code>${this.rule}</code></div>`:j}${e.map(n=>{let r=as(n.last.status,n.last.status_window),i=t.get(n.credential),a=this.rests.filter(e=>!(e.credential!==n.credential||e.account&&n.account&&e.account!==n.account)),o=!!n.account&&e.some(e=>e!==n&&e.credential===n.credential);return k`<div class="acct">
|
|
373
|
+
<div class="acct-h"><i>${E(`Identity`)}</i><b>${ns(n.credential)||`—`}</b>${o?k`<i title=${E(T`Account: ${n.account??``}`)}>${ss(n.account??``)}</i>`:j}${r?Zr({text:r,tone:`attention`,title:n.last.status,mark:null}):j}${this.paused(a)}${i?k`<i title="max_five_hour_pct, max_seven_day_pct">${xs(i)}</i>`:j}</div>
|
|
374
|
+
<div class="rows">
|
|
375
|
+
${this.row(`seven_day`,E(`Weekly usage`),n.first,n.last,i?.seven_day_pct)}
|
|
376
|
+
${this.row(`five_hour`,E(`5-hour usage`),n.first,n.last,i?.five_hour_pct)}
|
|
377
|
+
</div>
|
|
378
|
+
${this.restList(a)}
|
|
379
|
+
</div>`})}${this.unread(e,t)}`}restList(e){return e.length?k`<ul class="rests" title="rests.jsonl">${e.map(e=>k`<li>${function(e){return K(e.ended?E(T`Paused ${G(e.since)} → ${G(e.ended)}`):E(T`Paused since ${G(e.since)}`),e.rule?E(T`Usage rule: ${e.rule}`):K(ps(e.window??``,e.pct),hs(e.cap)))}(e)}</li>`)}</ul>`:j}unread(e,t){let n=new Set(e.map(e=>e.credential));return[...new Set(this.rests.map(e=>e.credential))].filter(e=>!n.has(e)).map(e=>{let n=this.rests.filter(t=>t.credential===e),r=t.get(e);return k`<div class="acct">
|
|
380
|
+
<div class="acct-h"><i>${E(`Identity`)}</i><b>${ns(e)}</b>${this.paused(n)}${r?k`<i title="max_five_hour_pct, max_seven_day_pct">${xs(r)}</i>`:j}</div>
|
|
381
|
+
${this.restList(n)}
|
|
382
|
+
</div>`})}};U([P({attribute:!1})],hl.prototype,`journal`,void 0),U([P({attribute:!1})],hl.prototype,`accounts`,void 0),U([P({attribute:!1})],hl.prototype,`caps`,void 0),U([P({attribute:!1})],hl.prototype,`rests`,void 0),U([P()],hl.prototype,`rule`,void 0),U([P({type:Boolean})],hl.prototype,`live`,void 0),hl=U([N(`ca-quota`),D()],hl),R(`cae-mark-matrix`,Pa),R(`cae-layered-graph`,_o);var gl=`loop:`,_l=(e,t,n)=>{let r=e.get(t);r?r.push(n):e.set(t,[n])},vl=e=>typeof e==`string`;function yl(e){let t=e.flow_calls;return Array.isArray(t)&&t.length!==0?new Map(t.filter(e=>e&&vl(e.id)&&vl(e.function)).map(e=>[e.id,e])):null}var bl=new WeakMap;function xl(e){let t=bl.get(e);if(t)return t;let n=e.nodes.map(e=>{let t=function(e){let t=e.flow;if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=e;if(!t||typeof t!=`object`||!vl(t.function))break;let r=(Array.isArray(t.loops)?t.loops:[]).filter(e=>!!e&&typeof e.line==`number`);n.push({function:t.function,file:vl(t.file)?t.file:``,line:typeof t.line==`number`?t.line:0,loops:r.map(e=>e.line),passes:r.map(e=>typeof e.pass==`number`&&e.pass>=1?e.pass:1)})}return n}(e),n=e.created_from;return{n:e,frames:t,path:t.map(e=>e.function),from:Array.isArray(n)?n.filter(vl):[],call:vl(e.flow_call)?e.flow_call:``}}),r=new Map;for(let t of e.nodes)t.unit&&!r.has(t.unit)&&r.set(t.unit,r.size);let i={tasks:n,byKey:new Map(n.map(e=>[e.n.key,e])),calls:yl(e),unitRank:r,labels:new Map(e.groups.map(e=>[e.id,e.label]))};return bl.set(e,i),i}var Sl=(e,t)=>t.every((t,n)=>e[n]===t),Cl=e=>e.slice(e.lastIndexOf(`.`)+1)||e,wl=(e,t)=>t>0?e.frames[t-1]?.loops??[]:[],Tl=(e,t)=>t>0?e.frames[t-1]?.passes??[]:[];function El(e,t){for(let n=0;n<Math.max(e.length,t.length);n++){let r=(e[n]??0)-(t[n]??0);if(r)return r}return 0}var Dl=e=>e.map((t,n)=>`${gl}${e.slice(0,n+1).join(`.`)}`);function Ol(e,t){let n=wl(e,t),r=n.length?`@${n.join(`.`)}`:``;if(e.path.length<=t)return{id:`kind:${e.n.group}${r}`,type:`kind`,name:e.n.group,loops:n};let i=e.path[t];return{id:`flow:${i}${r}`,type:`flow`,name:i,loops:n}}function kl(e,t,n){if(!e.call)return{id:`>${t}`,own:!1};let r=e.call.split(`.`),i=r.map((e,t)=>r.slice(0,t+1).join(`.`)),a=0,o=0;if(n)for(let r=1;r<i.length;r++){let s=n.get(i[r])?.function,c=s===void 0?-1:e.frames.findIndex((e,t)=>t>o&&e.function===s);if(c<0||c>t)break;a=r,o=c}else a=Math.min(t,i.length-1),o=a;let s=i[a];return o===t?{id:s,own:!0}:{id:`${s}>${t}`,own:!1}}var Al={failed:6,running:5,blocked:4,partial:3,pending:2,skipped:1,done:0},jl=e=>e.reduce((e,t)=>Al[t.state]>Al[e]?t.state:e,`done`),Ml=e=>e.reduce((e,t)=>Al[t]>Al[e]?t:e,`done`);function Nl(e){let t=e.filter(C).length;return t===0?`agent`:t===e.length?`python`:`mixed`}var Pl={running:`running`,returned:`done`,raised:`failed`,closed:`failed`},Fl=e=>e?.state===`raised`||e?.state===`closed`;function Il(e,t){let n=e.map(e=>e.n);return{key:(n.find(e=>e.state===`running`)??n[n.length-1]??{key:``}).key,unit:t,state:jl(n),count:n.length,keys:n.map(e=>e.key)}}function Ll(e){let t=new Map,n=[];for(let r of e)r.n.unit?_l(t,r.n.unit,r):n.push(Il([r],``));return{byUnit:new Map([...t].map(([e,t])=>[e,Il(t,e)])),single:n}}function Rl(e,t,n,r){let i=(e,t)=>{let i=e.map(e=>e.own?r?.get(e.id):void 0),a=e.map((e,t)=>{let n=i[t],r=jl(e.tasks.map(e=>e.n));return n&&Pl[n.state]?Ml([Pl[n.state],r]):r}),o=e.flatMap(e=>e.tasks),s=o.map(e=>e.n.key),c=e.find((e,t)=>a[t]===`running`)??e[e.length-1],l=i.find(Fl),u={key:c?.id??``,unit:t,state:Ml(a),count:s.length,keys:s,flow:n,counts:zl(o)},d=c?.own?r?.get(c.id)?.time_box:null,f=d?function(e){let t=Date.parse(e.started_at);return Number.isNaN(t)?``:new Date(t+1e3*e.deadline_s).toISOString()}(d):``,p=f?{...u,deadlineAt:f}:u;return l?{...p,error:l.error??``}:p},a=new Map,o=[],s=function(e,t,n){let r=new Map;for(let i of e){let{id:e,own:a}=kl(i,t,n);(r.get(e)??r.set(e,{id:e,own:a,tasks:[],unit:``}).get(e))?.tasks.push(i)}for(let e of r.values()){let t=new Set(e.tasks.map(e=>e.n.unit||``));e.unit=t.size===1?[...t][0]:``}return[...r.values()]}(e,t,r);for(let e of s)e.unit?_l(a,e.unit,e):o.push(i([e],``));let c=r?s.filter(e=>e.own&&Fl(r.get(e.id))).length:0,l=s.map(e=>e.own?r?.get(e.id)?.time_box:null).find(e=>e)??null;return{byUnit:new Map([...a].map(([e,t])=>[e,i(t,e)])),single:o,calls:s.length,errors:c,timeBox:l}}function zl(e){let t={total:e.length,done:0,partial:0,failed:0,running:0,pending:0,skipped:0,blocked:0};for(let n of e)t[n.n.state]+=1;return t}function Bl(e,t){let n=new Map;for(let r of e){let e=r.n.unit||``,i=n.get(e);(!i||El(Tl(r,t),i)>0)&&n.set(e,Tl(r,t))}return e.filter(e=>El(Tl(e,t),n.get(e.n.unit||``)??[])===0)}function Vl(e,t){let n=new Map;for(let r of e){let e=r.n.unit||``;(n.get(e)??n.set(e,new Set).get(e))?.add(Tl(r,t).join(`.`))}return new Map([...n].map(([e,t])=>[e,t.size]))}var Hl=(e,t)=>t&&t>1?{...e,passes:t}:e;function Ul(e,t){let n=xl(e);return Wl(n,t,n.tasks.filter(e=>Sl(e.path,t)))}function Wl(e,t,n){let r=t.length,i=new Map,a=new Map;for(let e of n){let t=Ol(e,r);(i.get(t.id)??i.set(t.id,{...t,tasks:[]}).get(t.id))?.tasks.push(e),a.set(e.n.key,t.id)}let o=new Map,s=new Map,c=new Map,l=new Map;for(let t of i.values()){let n=Dl(t.loops),i=n[n.length-1]??null;n.forEach((e,t)=>l.set(e,n[t-1]??null)),i&&c.set(t.id,i);let a=i?Bl(t.tasks,r):t.tasks;s.set(t.id,a);let u=t.type===`kind`?Ll(a):Rl(a,r,t.name,e.calls);if(i){let e=Vl(t.tasks,r);u.byUnit=new Map([...u.byUnit].map(([t,n])=>[t,Hl(n,e.get(t))]))}o.set(t.id,u)}let u=[...new Set([...o.values()].flatMap(e=>[...e.byUnit.keys()]))].sort((t,n)=>(e.unitRank.get(t)??0)-(e.unitRank.get(n)??0)),d=new Map,f=new Map;for(let e of i.values()){let t=Dl(e.loops);for(let n of e.tasks){let e=Tl(n,r);t.forEach((t,r)=>{d.set(t,Math.max(d.get(t)??1,e[r]??1));let i=f.get(t)??f.set(t,new Map).get(t),a=n.n.unit||``;(i?.get(a)??i?.set(a,new Set).get(a))?.add(e.slice(0,r+1).join(`.`))})}}let p=new Set,m=new Map,h=new Map,g=n=>{let i=0;for(;i<r&&n.path[i]===t[i];)i++;let a=Ol(n,i);return{id:`stub:${i}:${a.id}`,label:a.type===`kind`?e.labels.get(a.name)??a.name:Cl(a.name)}};for(let t of n){let n=a.get(t.n.key),i=(i,o)=>{let s=a.get(i);if(s===n)return void(o===`after`&&p.add(n));if(s!==void 0){let a=e.byKey.get(i),c=wl(a,r),l=wl(t,r),u=0;for(;u<c.length&&c[u]===l[u];)u++;let d=El(Tl(a,r).slice(0,u),Tl(t,r).slice(0,u))===0,f=`${s}\0${n}\0${o}`,p=m.get(f)??m.set(f,{from:s,to:n,type:o,tasks:new Set,samePass:!1}).get(f);p?.tasks.add(t.n.key),p&&d&&(p.samePass=!0);return}let c=e.byKey.get(i);if(!c)return;let l=g(c),u=`${l.id}\0${n}\0${o}`;(h.get(u)??h.set(u,{...l,to:n,type:o,tasks:new Set}).get(u))?.tasks.add(t.n.key)};for(let e of t.n.after??[])i(e,`after`);for(let e of t.from)i(e,`created`)}let _=[...m.values()].filter(e=>e.type===`after`||!m.has(`${e.from}\0${e.to}\0after`)),v=[...h.values()].filter(e=>e.type===`after`||!h.has(`${e.id}\0${e.to}\0after`)),y=[...l.keys()].map(e=>{let i=new Map;for(let[t,n]of f.get(e)??[])t&&i.set(n.size,(i.get(n.size)??0)+1);return{id:e,local:e,layer:[...t],loop:Number(e.slice(5).split(`.`).pop()),file:n[0]?.frames[r-1]?.file??``,parent:l.get(e)??null,passes:d.get(e)??1,spread:[...i].sort((e,t)=>e[0]-t[0]),layers:[]}});return{model:{path:[...t],nodes:[...i.values()].map(n=>{let r=o.get(n.id),i=r.byUnit.size>0;return{id:n.id,type:n.type,name:n.name,label:n.type===`kind`?e.labels.get(n.name)??n.name:Cl(n.name),layer:[...t],kinds:[...new Set(n.tasks.map(e=>e.n.kind))],executor:n.type===`flow`?null:Nl(n.tasks.map(e=>e.n)),box:c.get(n.id)??null,units:i?u.map(e=>r.byUnit.get(e)??null):[],single:r.single,inOrder:p.has(n.id),counts:zl(s.get(n.id)??[]),calls:r.calls??0,errors:r.errors??0,timeBox:r.timeBox??null}}),boxes:y,fns:[],edges:_.map(e=>({from:e.from,to:e.to,tasks:e.tasks.size,type:e.type,samePass:e.samePass,back:!1})),stubs:v.map(e=>({id:e.id,label:e.label,to:e.to,tasks:e.tasks.size,type:e.type})),units:u},drafts:i,ix:e}}var Gl=e=>e===`after`?`solid`:`dashed`;function Kl(e){return{nodes:e.nodes.map(e=>({id:e.id,cluster:e.box})),clusters:[...e.boxes.map(e=>({id:e.id,parent:e.parent,cycle:!0})),...e.fns.map(e=>({id:e.id,parent:e.parent,cycle:!1}))],edges:e.edges.map(e=>({from:e.from,to:e.to,style:Gl(e.type),ranks:e.samePass})),stubs:e.stubs.map(e=>({id:e.id,to:e.to,style:Gl(e.type)}))}}function ql(e,t){let n=new Map(e.nodes.map(e=>[e.id,e])),r=new Map(t.clusters.map(e=>[e.id,e.layers]));return{...t,path:e.path,nodes:t.drawn.map(e=>n.get(e)),boxes:e.boxes.map(e=>({...e,layers:r.get(e.id)??[]})),fns:e.fns,edges:e.edges.map((e,n)=>({...e,back:t.back[n]??!1})),stubs:e.stubs,units:e.units}}var Jl=`fx::`,Yl=(e,t)=>`${e.join(`/`)}/${t}`,Xl=e=>e?.state===`raised`||e?.state===`closed`;function Zl(e,t,n=!1){let r=t.length,i=new Map,a=new Set;if(e.calls)for(let t of e.calls.values())Xl(t)&&a.add(t.id);for(let o of e.tasks){if(!Sl(o.path,t))continue;let e=o.n.state,s=!!o.call&&[...a].some(e=>o.call===e||o.call.startsWith(`${e}.`)),c=null;for(let t=r;t<o.path.length;t++){let a=Ol(o,t),l=o.path.slice(0,t),u=Yl(l,a.id),d=i.get(u);if(!d){let e={total:0,done:0,partial:0,failed:0,running:0,pending:0,skipped:0,blocked:0},n=t>0?o.frames[t-1]?.file??``:``;d={key:u,layer:l,id:a.id,name:a.name,depth:t-r,loops:a.loops,file:n,counts:e,tasks:0,agent:0,failed:0,running:0,stuck:0,errors:!1,kids:new Set,fns:new Set,parent:c},i.set(u,d)}d.tasks+=1,d.counts.total+=1,d.counts[e]+=1,C(o.n)||(d.agent+=1),e===`failed`?d.failed+=1:e===`running`?d.running+=1:(e===`blocked`||e===`pending`&&!n)&&(d.stuck+=1),s&&(d.errors=!0);let f=Ol(o,t+1);d.kids.add(f.id),f.type===`flow`&&d.fns.add(Yl(o.path.slice(0,t+1),f.id)),c=u}}return i}function Ql(e,t=new Set){return Math.log2(1+e.tasks)+(e.failed||e.errors?4:0)+(e.running?3:0)+(e.stuck?1.5:0)+(t.has(e.key)?6:0)}var $l=(e,t=new Set)=>e.agent>0||e.failed>0||e.errors||e.running>0||e.stuck>0||t.has(e.key),eu=(e,t)=>Ql(e,t)-1.5*e.depth;function tu(e,t,n){let r=new Set,i=[],a=n.closed??new Set,o=n.open??new Set,s=t,c=new Set([...e.values()].filter(e=>e.parent===null).map(e=>e.key));for(;c.size;){let t=null,l=-1/0;for(let r of c){let i=e.get(r),a=o.has(r)?1/0:eu(i,n.toward);a>l&&(t=i,l=a)}if(!t)break;if(c.delete(t.key),a.has(t.key))continue;let u=t.kids.size-1;if(o.has(t.key)||n.all||!(s+u>n.budget)&&$l(t,n.toward)){r.add(t.key),o.has(t.key)||i.push(t.key),s+=u;for(let e of t.fns)c.add(e)}}return{open:r,auto:i}}function nu(e,t){let n=new Set,r=null;e.startsWith(`fx::`)?r=e.slice(4).split(`#`)[0]??null:e.includes(`::`)&&(r=e.slice(0,e.lastIndexOf(`::`)));for(let e=r;e!==null&&t.has(e);e=t.get(e)?.parent??null)n.add(e);return n}function ru(e,t,n){let r=xl(e),i=t.length,a=r.tasks.filter(e=>Sl(e.path,t)),o=Zl(r,t,n.live),s=new Set(a.map(e=>Ol(e,i).id)).size,c=n.sel?nu(n.sel,o):n.toward,{open:l,auto:u}=tu(o,s,{...n,toward:c}),d=iu(r,t,a,o,l),f=e=>Ha(Va(Kl(e))).span;if(n.maxSpan&&!n.all)for(;u.length&&f(d)>n.maxSpan;)l.delete(u.pop()),d=iu(r,t,a,o,l);return{model:d,open:l,stats:o}}function iu(e,t,n,r,i){let a=t.length,o=new Map,s=new Map([[``,[]]]);for(let e of n){let t=a,n=``;for(s.get(``)?.push(e);t<e.path.length;){let r=Yl(e.path.slice(0,t),Ol(e,t).id);if(!i.has(r))break;n=r,_l(s,r,e),t++}o.set(e.n.key,{key:n,depth:t})}let c=new Map,l=new Map;for(let[n,i]of s){let a=r.get(n),o=a?[...a.layer,a.name]:[...t];l.set(n,o),c.set(n,Wl(e,o,i))}let u=(e,t)=>e===``?t:`${e}::${t}`,d=e=>{let t=r.get(e);return(t?c.get(t.parent??``):void 0)?.model.nodes.find(e=>e.id===t?.id)},f=e=>(e=>{let t=r.get(e);if(!t||t.parent===null)return!1;let n=c.get(t.parent);if(!n)return!1;let i=n.model.nodes.filter(e=>e.type===`flow`);return i.length===1&&i[0]?.id===t.id&&!i[0]?.box})(e)?f(r.get(e).parent):`${Jl}${e}`,p=[],m=[],h=new Map,g=new Set;for(let e of[...c.keys()].sort((e,t)=>e===``?-1:t===``?1:(r.get(e)?.depth??0)-(r.get(t)?.depth??0))){let t=c.get(e),n=l.get(e),a=e===``?null:f(e);if(e!==``){let t=d(e),n=r.get(e),i=t?{...t,id:u(n.parent??``,t.id)}:void 0,o={id:`${Jl}${e}`,key:e,node:i};if(a===`fx::${e}`){let e=t?.box?u(n.parent??``,t.box):n.parent===null?null:f(n.parent);h.set(a,{id:a,parent:e,parts:[o]})}else h.get(a)?.parts.push(o)}for(let r of t.model.boxes)m.push({...r,id:u(e,r.id),parent:r.parent?u(e,r.parent):a,layer:n});for(let r of t.model.nodes)r.type===`flow`&&i.has(Yl(n,r.id))||p.push({...r,id:u(e,r.id),box:r.box?u(e,r.box):a,layer:n});for(let e of t.model.units)g.add(e)}let _=[...g].sort((t,n)=>(e.unitRank.get(t)??0)-(e.unitRank.get(n)??0)),v=new Map([...c].map(([e,t])=>[e,t.model.units]));for(let e of p){let t=e.id.includes(`::`)?e.id.slice(0,e.id.lastIndexOf(`::`)):``,n=v.get(t)??[];if(!e.units.length)continue;let r=new Map(n.map((t,n)=>[t,e.units[n]??null]));e.units=_.map(e=>r.get(e)??null)}let y=e=>{let t=o.get(e.n.key);return u(t.key,Ol(e,t.depth).id)},b=e=>e.path.slice(0,o.get(e.n.key).depth),x=new Set,S=new Map,ee=new Map;for(let r of n){let n=y(r),i=(i,o)=>{let s=e.byKey.get(i);if(!s)return;if(Sl(s.path,t)){let e=y(s);if(e===n)return void(o===`after`&&x.add(n));let t=b(s),i=b(r),a=0;for(;a<t.length&&a<i.length&&t[a]===i[a];)a++;let c=wl(s,a),l=wl(r,a),u=0;for(;u<c.length&&c[u]===l[u];)u++;let d=El(Tl(s,a).slice(0,u),Tl(r,a).slice(0,u))===0,f=`${e}\0${n}\0${o}`,p=S.get(f)??S.set(f,{from:e,to:n,type:o,tasks:new Set,samePass:!1}).get(f);p?.tasks.add(r.n.key),p&&d&&(p.samePass=!0);return}let c=0;for(;c<a&&s.path[c]===t[c];)c++;let l=Ol(s,c),u={id:`stub:${c}:${l.id}`,label:l.type===`kind`?e.labels.get(l.name)??l.name:Cl(l.name)},d=`${u.id}\0${n}\0${o}`;(ee.get(d)??ee.set(d,{...u,to:n,type:o,tasks:new Set}).get(d))?.tasks.add(r.n.key)};for(let e of r.n.after??[])i(e,`after`);for(let e of r.from)i(e,`created`)}for(let e of p)e.inOrder=x.has(e.id);let te=[...S.values()].filter(e=>e.type===`after`||!S.has(`${e.from}\0${e.to}\0after`)).map(e=>({from:e.from,to:e.to,tasks:e.tasks.size,type:e.type,samePass:e.samePass,back:!1})),ne=[...ee.values()].filter(e=>e.type===`after`||!ee.has(`${e.id}\0${e.to}\0after`)).map(e=>({id:e.id,label:e.label,to:e.to,tasks:e.tasks.size,type:e.type}));return{path:[...t],nodes:p,boxes:m,fns:[...h.values()],edges:te,stubs:ne,units:_}}function au(e){let t=new Map;for(let n of e)for(let e of n.after??[])(t.get(e)??t.set(e,[]).get(e))?.push(n.key);return{byKey:new Map(e.map(e=>[e.key,e])),waiters:t}}function ou(e,t,n,r,i=Ul(e,t)){let{drafts:a,ix:o}=i,s=ql(i.model,Va(Kl(i.model),r,!1)),c=s.boxes.find(e=>e.id===n);if(!c)return null;let l=t.length,u=c.id.slice(5).split(`.`).length-1,d=new Map(s.boxes.map(e=>[e.id,e])),f=new Map(s.nodes.map(e=>[e.id,e])),p=e=>Tl(e,l).slice(u),m=e=>e.layers.flat().flatMap(e=>d.has(e)?m(d.get(e)):[e]),h=e=>m(e).flatMap(e=>a.get(e)?.tasks??[]),g=(e,t)=>e.length===t.length&&El(e,t)===0,_=(e,t)=>{let n=t.length;return[...new Set(h(e).map(p).filter(e=>e.length>n&&El(e.slice(0,n),t)===0).map(e=>e[n]))].sort((e,t)=>e-t).flatMap(n=>{let r=[...t,n],i=e.layers.flat().flatMap(e=>{let t=d.get(e);if(t){let e=_(t,r);return e.length?[{type:`loop`,box:t,kids:e}]:[]}let n=f.get(e);return n&&a.get(e)?.tasks.some(e=>g(p(e),r))?[{type:`node`,node:n,passes:r}]:[]});return i.length?[{type:`pass`,box:e,pass:n,kids:i}]:[]})},v=_(c,[]),y=[],b=e=>e.type===`node`?1:e.kids.reduce((e,t)=>e+b(t),0),x=e=>e.type===`node`?1:1+Math.max(0,...e.kids.map(x)),S=Math.max(1,...v.map(x)),ee=Array.from({length:S},()=>[]),te=(e,t)=>{let n=ee[t];if(e.type===`node`)return n.push({type:`node`,node:e.node,passes:e.passes,span:1,rows:S-t}),void y.push({node:e.node,passes:e.passes});n.push(e.type===`pass`?{type:`pass`,box:e.box,pass:e.pass,span:b(e),rows:1}:{type:`loop`,box:e.box,span:b(e),rows:1});for(let n of e.kids)te(n,t+1)};for(let e of v)te(e,0);let ne=h(c),re=new Set(ne.map(e=>e.n.unit||``)),ie=[...s.units.filter(e=>re.has(e)),...re.has(``)?[``]:[]],ae=new Map;return y.forEach((e,t)=>{for(let n of a.get(e.node.id)?.tasks??[])g(p(n),e.passes)&&_l(ae,`${t}\0${n.n.unit||``}`,n)}),{box:c,columns:y,head:ee,rows:ie.map(e=>{let t=y.map((t,n)=>{let r=ae.get(`${n}\0${e}`);return r?.length?((e,t,n)=>{let r=a.get(e.node.id);if(r.type===`kind`)return Il(t,n);let i=Rl(t,l,r.name,o.calls);return n?i.byUnit.get(n)??i.single[0]??null:i.single[0]??null})(t,r,e):null});return{unit:e,passes:new Set(ne.filter(t=>(t.n.unit||``)===e).map(e=>Tl(e,l).slice(0,u+1).join(`.`))).size,state:Ml(t.filter(e=>e!==null).map(e=>e.state)),cells:t}})}}function su(e,t){let n=new Map(e.map((e,t)=>[e,t])),r=e=>t===`passes`?-e.passes:t===`state`?-Al[e.state]:0;return[...e].sort((e,t)=>r(e)-r(t)||(n.get(e)??0)-(n.get(t)??0))}var cu=(e,t,n=[])=>`${e}${n.length?`|${n.join(`.`)}`:``}#${t.unit||t.key}`;function lu(e,t,n){if(!n)return null;let r=n.indexOf(`#`);if(r<0){let t=e.nodes.find(e=>e.id===n);if(t)return{type:`node`,id:n,node:t};let r=e.boxes.find(e=>e.id===n);if(r)return{type:`box`,id:n,box:r};let i=e.fns.flatMap(e=>e.parts).find(e=>e.id===n);return i?{type:`node`,id:n,node:i.node}:null}let[i=``,a]=n.slice(0,r).split(`|`),o=n.slice(r+1),s=e=>!!e&&(e.unit?e.unit===o:e.key===o);if(a!==void 0){if(!t)return null;let e=t.columns.findIndex(e=>e.node.id===i&&e.passes.join(`.`)===a),r=t.columns[e],o=t.rows.map(t=>t.cells[e]).find(s);return r&&o?{type:`mark`,id:n,node:r.node,mark:o,passes:r.passes}:null}let c=e.nodes.find(e=>e.id===i),l=c?[...c.units,...c.single].find(s):void 0;return c&&l?{type:`mark`,id:n,node:c,mark:l,passes:[]}:null}var uu=[`done`,`partial`,`running`,`pending`,`failed`,`blocked`,`skipped`],du={done:{tone:`done`,shape:`round`},partial:{tone:`attention`,shape:`half`},running:{tone:`running`,shape:`round`},pending:{tone:`neutral`,shape:`ring`},failed:{tone:`failed`,shape:`square`},blocked:{tone:`attention`,shape:`hatched`},skipped:{tone:`muted`,shape:`round`}};function fu(e){return Object.fromEntries(uu.map(t=>[t,{...du[t],label:pu(t,e),rank:Al[t],count:n=>mu(t,n,e)}]))}function pu(e,t){return Io(h(e),t)}function mu(e,t,n){let r=h(e);return X(r!==`waiting`||n?r:`not_run`,t)}function hu(e){return E(T`${e.done} of ${e.total} tasks done`)}function gu(e,t){return[`failed`,`blocked`,`partial`,`running`,`pending`,`skipped`].filter(t=>e[t]).map(n=>mu(n,e[n],t))}function _u(e,t){let n=e.counts,r=[];return n.failed&&r.push([`err`,mu(`failed`,n.failed,t)]),e.errors&&r.push([`err`,e.errors===1?E(`1 flow call stopped with an error`):E(T`${e.errors} flow calls stopped with an error`)]),n.blocked&&r.push([`warn`,mu(`blocked`,n.blocked,t)]),n.partial&&r.push([`warn`,mu(`partial`,n.partial,t)]),n.running&&r.push([`live`,mu(`running`,n.running,t)]),n.pending&&r.push([`mut`,mu(`pending`,n.pending,t)]),n.skipped&&r.push([`mut`,mu(`skipped`,n.skipped,t)]),r}function vu(e,t){let n=t?t.slice(t.lastIndexOf(`/`)+1):``;return n?`${n}:${e}`:E(T`line ${e}`)}function yu(e){return e.executor===`agent`?E(`Agent task`):e.executor===`python`?E(`Python task`):e.executor===`mixed`?K(E(`Agent task`),E(`Python task`)):``}function bu(e){return e.type===`flow`?K(E(T`Function ${e.name}`),e.timeBox?E(T`Deadline ${z(e.timeBox.deadline_s)}`):``,hu(e.counts)):K(e.label,yu(e),hu(e.counts))}function xu(e,t){let n=e=>{let n=t.nodes.find(t=>t.id===e);return n?n.box?E(T`${n.label} in the loop`):n.label:e},r=r=>[...t.stubs.filter(t=>t.to===e.id&&t.type===r).map(e=>e.label),...t.edges.filter(t=>t.to===e.id&&t.type===r).map(e=>n(e.from))];return{waits:r(`after`),after:r(`created`),feeds:[...new Set(t.edges.filter(t=>t.from===e.id).map(e=>n(e.to)))]}}function Su(e,t,n){let r=e.counts,{waits:i,after:a,feeds:o}=xu(e,t);return[e.type===`flow`?K(E(T`Function ${e.label}`),hu(r)):K(e.label,yu(e),hu(r)),..._u(e,n).map(([,e])=>e),i.length?E(T`Waits for: ${Mo(i)}`):``,a.length?E(T`Created after: ${Mo(a)}`):``,o.length?E(T`Later tasks: ${Mo(o)}`):``].filter(Boolean).join(`. `)}function Cu(e,t,n,r=``){let i=t.flow?void 0:n.task,a=q({kind:t.count===1&&i?i.kind:e,unit:t.unit}),o=t.flow||t.state!==`blocked`?``:n.causeOf(t.key),s=o?E(T`Not started: ${o}`):pu(t.state,n.live),c=i?.attempts??1,l=c>1?E(T`${c} attempts`):``;return{name:a,parts:[s,r,t.passes?$o(t.passes):``,l,t.flow||t.count>1?E(T`${t.count} tasks`):``,...t.counts?gu(t.counts,n.live):[],...t.error===void 0?[]:[E(`Flow call stopped with an error`),t.error],t.flow||t.state!==`done`&&t.state!==`partial`&&t.state!==`failed`||!i?.wall_s?``:z(i.wall_s)].filter(Boolean),id:t.flow?E(T`Flow call ${t.key}`):t.key}}var wu={err:`failed`,warn:`attention`,live:`running`,mut:`muted`};function Tu(e){return t=>{let{outcomes:n}=S(e.journal,e.plan),r=n.get(t);return r?Ko(r,n,e.run):``}}var Eu=e=>{let t=Tu(e);return n=>({task:e.links.byKey.get(n.key),causeOf:t,live:e.live})},Du=e=>E(T`Loop at ${vu(e.loop,e.file)}`),Ou=e=>e.executor===`mixed`?[`agent`,`python`]:e.executor?[e.executor]:[];function ku(e,t,n=!1){let r=Eu(t),i=(e,t)=>{let{name:n,parts:i}=Cu(e.label,t,r(t));return{id:cu(e.id,t),state:t.state,label:K(n,...i),tip:[n,i[0]??``].filter(Boolean).join(`
|
|
383
|
+
`),...t.passes?{badge:String(t.passes)}:{},name:t.unit||t.key,drill:!!t.flow}},a=e.nodes.map(r=>{let a=r.counts;return{id:r.id,label:r.label,tip:bu(r),summary:Su(r,e,t.live),cluster:r.box,icons:Ou(r),accent:r.executor===`agent`,drill:r.type===`flow`,marks:r.units.map(e=>e&&i(r,e)),loose:r.single.map(e=>i(r,e)),counts:a,progress:{done:a.done,total:a.total,label:hu(a)},notes:_u(r,t.live).map(([e,t])=>({text:t,tone:wu[e]})),look:a.failed||r.errors?`failed`:a.running?`running`:a.done+a.skipped===a.total?`done`:void 0,...r.type===`flow`&&n?{toggle:`closed`}:{}}}),o=e.fns.map(n=>{let r=n.parts[0].node,i=n.parts.map(e=>e.node.label).join(` › `),a=r.counts,o=_u(r,t.live).map(([,e])=>e);return{id:n.id,parent:n.parent,label:i,tip:r.name,note:`${a.done}/${a.total}`,...o.length?{detail:K(...o)}:{},summary:K(i,Su(r,e,t.live)),chipLabel:E(T`Inside ${i}`),chipTip:K(E(`Function`),i),drill:!0,cycle:!1,toggle:`open`,path:n.parts.map(e=>({id:e.id,label:e.node.label,tip:e.node.name}))}}),s=e.boxes.map(e=>{let t=Du(e),n=e.spread.length>1?es(e.spread):``,r=Qo(e.passes);return{id:e.id,parent:e.parent,label:ts(),tip:K(ts(),t),note:r,...n?{detail:n,detailTip:E(`Units by number of passes`)}:{},summary:K(t,r,n),chipLabel:K(E(T`Passes of the loop at ${vu(e.loop,e.file)}`),r),chipTip:K(t,r),drill:!0,cycle:!0}});return{series:e.units,nodes:a,clusters:[...s,...o],edges:e.edges.map(e=>({from:e.from,to:e.to,style:Gl(e.type),weight:e.tasks,ranks:e.samePass})),stubs:e.stubs.map(e=>({id:e.id,label:e.label,to:e.to,style:Gl(e.type),weight:e.tasks}))}}function Au(e,t,n){let r=Ul(e,t);return{input:ku(r.model,{...n,plan:e}),proj:r}}function ju(e,t,n){let r=Eu(n),i=e.box,a=Du(i),o=e.rows.filter(e=>e.unit).length,s=e.head.map(e=>e.map(e=>{if(e.type===`pass`)return{id:`${e.box.id}|${e.pass}`,label:Zo(e.pass),tip:e.box.id===i.id?Du(e.box):E(T`Nested loop at ${vu(e.box.loop,e.box.file)}`),span:e.span,rows:e.rows,type:`group`};if(e.type===`loop`)return{id:e.box.id,label:ts(),tip:E(T`Nested loop at ${vu(e.box.loop,e.box.file)}`),code:!0,span:e.span,rows:e.rows,type:`group`};let t=e.node,n=t.type===`flow`;return{id:`${t.id}|${e.passes.join(`.`)}`,label:t.label,tip:n?E(T`Function ${t.name}`):K(t.label,yu(t)),summary:n?t.label:K(t.label,yu(t)),icons:t.executor&&t.executor!==`mixed`?[t.executor]:[],span:e.span,rows:e.rows,type:`column`}}));return{caption:a,...i.file?{captionTip:`${i.file}:${i.loop}`}:{},label:K(a,Qo(i.passes)),facts:[Qo(i.passes),i.spread.length>1?es(i.spread):``,E(o===1?`1 unit`:T`${o} units`)].filter(Boolean),head:s,columns:e.columns.map(e=>({id:`${e.node.id}|${e.passes.join(`.`)}`,groups:e.passes.map((t,n)=>e.passes.slice(0,n+1).join(`.`))})),rows:su(e.rows,t).map(t=>({id:t.unit,label:t.unit||E(`No unit`),tip:t.unit||E(`Tasks that run once per run, not once per unit`),muted:!t.unit,value:t.passes,strong:t.passes>1,cells:t.cells.map((t,n)=>t&&((t,n)=>{let i=e.columns[t],a=i?.node.label??``,o=i?.passes??[],{name:s,parts:c}=Cu(a,n,r(n),Mo(o.map(Zo)));return{id:cu(i?.node.id??``,n,o),state:n.state,label:K(s,...c),tip:[s,c[0]??``].filter(Boolean).join(`
|
|
384
|
+
`),drill:!!n.flow}})(n,t))})),value:{label:E(`Passes`),tip:E(`Passes of this loop`)},sorts:[{id:`order`,label:E(`Scheduled order`)},{id:`passes`,label:E(`Number of passes`)},{id:`state`,label:E(`Status`,{id:`status`})}],sort:t}}function Mu(e,t,n,r,i,a,o){let s=ou(e,t,n,r,o);return s&&{input:ju(s,i,{...a,plan:e}),matrix:s}}function Nu(e,t=[],n,r=!1){let{model:i}=Ul(e,t);return ql(i,Va(Kl(i),n,r))}function Pu(e){let t=xl(e),n=[],r=new Set;if(t.calls)for(let e of t.calls.values())e.state!==`raised`&&e.state!==`closed`||r.add(e.id);for(;;){let e=null,i=!0,a=[];for(let r of t.tasks){if(!Sl(r.path,n))continue;let t=Ol(r,n.length);if(t.type===`kind`||e&&e.id!==t.id){i=!1;break}e=t,a.push(r)}let o=a.some(e=>{return i=kl(e,n.length,t.calls).id,r.has(i)&&![...r].some(e=>e!==i&&e.startsWith(`${i}.`));var i});if(!i||!e||o)return n;n.push(e.name)}}function Fu(e){let t=e[e.length-1];return t?.startsWith(`loop:`)?{path:e.slice(0,-1),loop:t}:{path:[...e],loop:null}}function Iu(e,t){let{path:n,loop:r}=Fu(t),i=xl(e),a=t=>!r||Ul(e,t).model.boxes.some(e=>e.id===r);if(i.tasks.some(e=>Sl(e.path,n)))return a(n)?[...t]:null;let o=n[n.length-1];if(o===void 0)return null;let s=e=>{let t=new Map;for(let n of i.tasks)n.path.forEach((r,i)=>e(r)&&t.set(n.path.slice(0,i+1).join(`/`),n.path.slice(0,i+1)));return[...t.values()]},c=s(e=>e===o),l=c.length?c:s(e=>Cl(e)===o),u=l.length===1?l[0]:null;return u&&a(u)?r?[...u,r]:u:null}function Lu(e,t){if(e.length<=t.length)return null;let n=e.slice(0,-1);return n.length<=t.length?[]:n}function Ru(e,t,n){return pi((e=>e?`⚙`:`✦`)(e),t,{cls:n??`k-ic `+(e?``:`llm`)})}var zu=O` .k-ic{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:6px;margin-right:7px;font-size:var(--font-size-sm);background:var(--raise);color:var(--text-muted);flex:none;}.k-ic.llm{background:var(--agent-bg);color:var(--agent);}`;function Bu(e,t){t!==e.sel&&Q(e.el,`ca-navigate`,{sel:t})}function Vu(e,t,n=e.unit){let r=t.join(`/`);Q(e.el,`ca-navigate`,{layer:r===e.auto.join(`/`)?``:r,unit:n})}function Hu(e,t){Q(e.el,`ca-navigate`,{tab:`tasks`,kind:t.kinds.length===1?t.kinds[0]:``})}function Uu(e,t,n){if(t.flow)return Vu(e,[...n?.layer??e.graph.path,t.flow],t.unit||e.unit);let r=e.links.byKey.get(t.key);Q(e.el,`ca-open-task`,t.state===`blocked`?{key:t.key,view:`input`}:r?.executor===`python`?{key:t.key,view:`output`}:{key:t.key})}function Wu(e,t){return t.type===`mark`?Uu(e,t.mark,t.node):t.type===`box`?Vu(e,[...t.box.layer,t.box.local]):t.node.type===`flow`?Vu(e,[...t.node.layer,t.node.name]):void Hu(e,t.node)}function Gu(e,t){let n=function(e,t){let n=e=>{let r=e;for(;r.type===`fn`&&!t(r.id)&&r.kids.length===1&&r.kids[0]?.type===`fn`&&!t(r.kids[0].id);){let e=r.kids[0];r={...r,label:`${r.label} › ${e.label}`,tip:`${r.tip}\n${e.tip}`,kids:e.kids,parts:[...r.parts,...e.parts]}}return{...r,kids:r.kids.map(n)}};return e.map(n)}(t,t=>e.current(t)),r=(t,n=``)=>{let i=t.kids.length>0&&e.expanded(t.id),a=t.counts,o=a.total?Math.round((a.done+a.partial+a.skipped)/a.total*100):0,s=(t=>_u({counts:t.counts,errors:+!!t.errors},e.live))(t),c=s.map(([,e])=>e).join(`|`),l=c===n?[]:s,u=t.parts.some(t=>e.current(t.id)),d=t.parts.some(t=>e.here(t.id));return k`<li>
|
|
385
|
+
<div class="orow ${u?`cur`:``} ${t.parts.some(t=>e.selected(t.id))?`sel`:``}">
|
|
386
|
+
${t.kids.length?k`<button type="button" class="odisc" aria-expanded=${i} aria-label=${E(i?T`Fold ${t.label}`:T`Unfold ${t.label}`)} @click=${()=>e.expand(t.id,!i)}><span aria-hidden="true">${i?`▾`:`▸`}</span></button>`:k`<span class="odisc" aria-hidden="true"></span>`}
|
|
387
|
+
<button type="button" class="oname" title=${t.tip||j} aria-current=${d?`location`:j} @click=${n=>n.detail<2&&e.pick(t)} @dblclick=${()=>e.enter(t)} @keydown=${n=>{n.key===`Enter`&&(n.preventDefault(),e.enter(t))}}>
|
|
388
|
+
${t.type===`loop`?Za(12):j}<span class="ol">${t.label}</span>
|
|
389
|
+
<span class="obar" aria-hidden="true"><i style="width:${o}%"></i></span>
|
|
390
|
+
<span class="ocount" title=${hu(a)}>${a.done}/${a.total}</span>
|
|
391
|
+
</button>
|
|
392
|
+
${l.length?k`<div class="onote">${l.map(([e,t])=>k`<span class=${e}>${t}</span>`)}</div>`:j}
|
|
393
|
+
</div>
|
|
394
|
+
${i?k`<ul>${t.kids.map(e=>r(e,c))}</ul>`:j}
|
|
395
|
+
</li>`};return k`<nav class="outline" aria-label=${E(`Outline of the flow`)}><ul class="otree">${n.map(e=>r(e))}</ul></nav>`}var Ku=[V,zu,Jr,O` :host{display:flex;flex-direction:column;}cae-layered-graph{flex:auto;min-height:0;}.bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin-bottom:8px;font-size:12px;}.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:4px;list-style:none;margin:0;padding:0;}.crumbs li{display:inline-flex;align-items:center;gap:4px;}.crumbs .sep{color:var(--text-muted);}.crumbs button{all:unset;cursor:pointer;color:var(--accent);font-family:var(--mono);}.crumbs button:hover{text-decoration:underline;}.crumbs button:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:2px;border-radius:3px;}.crumbs [aria-current]{font-family:var(--mono);color:var(--text);font-weight:600;}.pin{display:inline-flex;align-items:center;gap:8px;color:var(--text-2);}.pin b{font-family:var(--mono);}.missing{margin-bottom:8px;font-size:12px;color:var(--status-attention);}.missing code{font-family:var(--mono);}.card{display:contents;}.ic{display:block;flex:none;}.loop-ic{color:var(--text-2);}.in-ic{color:var(--text-muted);}.card h4{margin:0;display:flex;align-items:center;gap:7px;font-family:var(--mono);font-size:13px;font-weight:600;color:var(--text);overflow-wrap:anywhere;}.card h4 .mark{--m:11px;flex:none;cursor:default;animation:none;}.card h4 .mark:hover{transform:none;outline:none;}.card h4 .k-ic{width:18px;height:18px;margin:0;border-radius:5px;font-size:10px;}.card .sub{color:var(--text-2);}.card dl{display:grid;grid-template-columns:fit-content(42%) minmax(0,1fr);gap:4px 12px;margin:0;}.card dt{color:var(--text-muted);word-break:keep-all;overflow-wrap:break-word;}.card dd{margin:0;color:var(--text);overflow-wrap:anywhere;font-variant-numeric:tabular-nums;}.card dd .err{color:var(--status-failed);}.card dd .warn{color:var(--status-attention);}.card .acts{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;padding-top:2px;}.card .go{all:unset;cursor:pointer;color:var(--accent);overflow-wrap:anywhere;}.card .go.primary{font-weight:600;}.card .go:hover{text-decoration:underline;}.card .go:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:2px;border-radius:3px;}.card .acts .switch{margin-left:auto;}.switch{all:unset;cursor:pointer;font-size:11.5px;color:var(--text-2);padding:2px 8px;border-radius:6px;border:1px solid var(--line);}.switch:hover{color:var(--text);border-color:var(--line2);}.switch:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:1px;}.switch[aria-pressed='true']{color:var(--text);background:var(--accent-bg);border-color:var(--accent);}.opens{display:inline-flex;gap:6px;margin-left:auto;}.whole{display:grid;grid-template-columns:minmax(200px,282px) minmax(0,1fr);gap:14px;align-items:start;}.whole>.g{min-width:0;}.outline{font-size:12px;max-height:70vh;overflow:auto;padding:2px 6px 2px 0;border-right:1px solid var(--line);}.otree,.otree ul{list-style:none;margin:0;padding:0;}.otree ul{padding-left:10px;}.orow{display:grid;grid-template-columns:16px minmax(0,1fr);align-items:start;border-radius:6px;}.orow.sel{background:var(--accent-bg);}.orow.cur .ol{font-weight:600;color:var(--text);}.odisc{all:unset;cursor:pointer;width:16px;text-align:center;color:var(--text-muted);font-size:10px;line-height:22px;}.odisc:focus-visible,.oname:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:1px;border-radius:4px;}.oname{all:unset;cursor:pointer;display:flex;align-items:flex-start;gap:6px;min-width:0;padding:3px 6px 3px 2px;border-radius:6px;color:var(--text-2);}.oname:hover{background:var(--raise);color:var(--text);}.oname .loop-ic{flex:none;color:var(--text-muted);}.ol{flex:1;min-width:0;overflow-wrap:break-word;font-family:var(--mono);line-height:1.35;}.obar{flex:none;width:32px;height:4px;margin-top:6px;border-radius:2px;background:var(--track);overflow:hidden;}.obar i{display:block;height:100%;background:var(--meter);}.ocount{flex:none;font-size:11px;color:var(--text-muted);font-variant-numeric:tabular-nums;}.onote{grid-column:2;display:flex;flex-wrap:wrap;gap:0 8px;padding:0 6px 2px 2px;font-size:11px;}.onote .err{color:var(--status-failed);}.onote .warn{color:var(--status-attention);}.onote .live{color:var(--status-running);}.onote .mut{color:var(--text-muted);}.odet{margin-bottom:8px;}.odet>summary{cursor:pointer;font-size:12px;color:var(--text-2);padding:2px 0;}.odet .outline{border-right:none;max-height:50vh;}`],qu=[zu,O` .node .k-ic{width:16px;height:16px;margin-right:6px;border-radius:4px;font-size:9.5px;}.legend .k-ic{width:14px;height:14px;margin:0;border-radius:4px;font-size:8.5px;}.list .k-ic{width:16px;height:16px;border-radius:4px;font-size:9.5px;}.list .nm .k-ic{margin:0 -2px 0 0;}.matrix thead th.nh .k-ic{width:14px;height:14px;margin-right:5px;border-radius:4px;font-size:8.5px;vertical-align:-2px;}`],Ju=e=>Math.max(14,Math.min(60,Math.round(e/34))),Yu=e=>Math.max(8,Math.min(16,Math.round(e/105))),Xu=(e,t)=>t>0&&t/(180*e)<.6,Zu=`*all`,Qu=`*none`,$u={...Va({nodes:[],clusters:[],edges:[],stubs:[]}),path:[],nodes:[],boxes:[],fns:[],edges:[],stubs:[],units:[]},ed=class extends M{constructor(...e){super(...e),this.plan={nodes:[],groups:[]},this.journal=[],this.run=``,this.live=!1,this.layer=``,this.unit=``,this.sel=``,this.down=!1,this.tall=!1,this.sort=`order`,this.missing=``,this.fixLayer=null,this.replacing=!1,this.auto=[],this.segments=[],this.proj=null,this.model=null,this.graph=$u,this.input={series:[],nodes:[],clusters:[],edges:[],stubs:[]},this.prevOrder=void 0,this.matrix=null,this.matrixIn=null,this.orders=new Map,this.links=au([]),this.states=fu(!1),this.locale=``,this.opened=null,this.closed=null,this.memRun=null,this.rev=0,this.budget=40,this.shownOpen=new Set,this.stats=new Map,this.focusToggle=``,this.flowStats=new Map,this.tree=[],this.folds=new Map,this.wide=!0,this.oh=this.outlineHost(),this.lights=()=>new Set,this.refocus=!1,this.cameFrom=``,this.h=this.partsHost(),this.onToggle=e=>this.toggle(e.detail.id,e.detail.open),this.onEscape=e=>{if(e.key!==`Escape`||e.defaultPrevented)return;let t=Lu(this.segments,this.auto);t&&(e.preventDefault(),this.refocus=!0,this.cameFrom=this.segments[this.segments.length-1]??``,Vu(this.h,t))},this.onSelect=e=>Bu(this.h,e.detail.id??``),this.onActivate=e=>{let t=lu(this.graph,this.matrix,e.detail.id);t?.type===`mark`?Uu(this.h,t.mark,t.node):t?.type===`node`&&Hu(this.h,t.node)},this.onDrill=e=>{let t=lu(this.graph,this.matrix,e.detail.id);t&&Wu(this.h,t)},this.onView=e=>{e.detail.view===`graph`&&this.matrix&&function(e){let t=e.segments[e.segments.length-1]??``,n=Lu(e.segments,e.auto)??[],r=e.auto.join(`/`);Q(e.el,`ca-navigate`,{layer:n.join(`/`)===r?``:n.join(`/`),unit:e.unit,sel:t})}(this.h)}}static{this.styles=Ku}static{this.properties={plan:{attribute:!1},journal:{attribute:!1},run:{},live:{type:Boolean},layer:{},unit:{},sel:{},down:{state:!0},sort:{state:!0},missing:{state:!0},rev:{state:!0},budget:{state:!0},wide:{state:!0}}}willUpdate(e){if(e.has(`run`)&&this.orders.clear(),e.has(`layer`)&&e.get(`layer`)!==void 0){let e=this.renderRoot instanceof ShadowRoot?this.renderRoot.activeElement:null,t=e?.shadowRoot?.activeElement;this.refocus=e!==null&&!t?.closest(`.views`),this.replacing?this.replacing=!1:this.missing=``}e.has(`run`)&&e.get(`run`)!==void 0&&(this.missing=``),e.has(`plan`)&&(this.links=au(this.plan.nodes)),(e.has(`plan`)||e.has(`live`))&&(this.flowStats=Zl(xl(this.plan),[],this.live),this.tree=function(e){let t=new Map;for(let n of e.values())(t.get(n.parent)??t.set(n.parent,[]).get(n.parent))?.push(n);let n=e=>{let r=[],i=new Map;for(let a of t.get(e)??[]){let e={id:a.key,type:`fn`,label:Cl(a.name),tip:a.name,layer:a.layer,name:a.name,counts:a.counts,errors:a.errors,kids:n(a.key),parts:[{id:a.key,layer:a.layer,name:a.name}]},t=r;a.loops.forEach((e,n)=>{let r=`${gl}${a.loops.slice(0,n+1).join(`.`)}`,o=`${a.layer.join(`/`)}|${r}`,s=i.get(o);if(!s){let e=a.loops[n];s={id:o,type:`loop`,label:E(T`Loop at ${vu(e,a.file)}`),tip:a.file?`${a.file}:${e}`:``,layer:a.layer,name:r,counts:{total:0,done:0,partial:0,failed:0,running:0,pending:0,skipped:0,blocked:0},errors:!1,kids:[],parts:[{id:o,layer:a.layer,name:r}]},i.set(o,s),t.push(s)}for(let e of Object.keys(s.counts))s.counts[e]+=a.counts[e];s.errors||=a.errors,t=s.kids}),t.push(e)}return r};return n(null)}(this.flowStats)),e.has(`run`)&&this.folds.clear();let t=e.has(`sel`)&&!!this.sel&&!Fu(this.segments).loop&&!lu(this.graph,this.matrix,this.sel),n=e.has(`plan`)||e.has(`layer`)||e.has(`run`)||e.has(`down`)||e.has(`rev`)||e.has(`budget`)||t;if(n){if(this.auto=Pu(this.plan),this.segments=this.layer?this.layer.split(`/`):this.auto,this.layer&&this.plan.nodes.length){let e=Iu(this.plan,this.segments);e?e.join(`/`)!==this.layer&&(this.segments=e,this.fixLayer=e.join(`/`)===this.auto.join(`/`)?``:e.join(`/`)):(this.missing=this.layer,this.segments=this.auto,this.fixLayer=``)}let{path:e,loop:t}=Fu(this.segments);if(t)this.proj=Ul(this.plan,e),this.model=this.proj.model;else{let t=this.memory(),n=this.openMode(),r=ru(this.plan,e,{open:new Set(t.opened.values().filter(e=>!e.startsWith(`*`))),closed:new Set(t.closed.values()),all:n===`all`,budget:n===`none`?0:this.budget,maxSpan:Yu(this.graphWidth()),sel:this.sel,live:this.live});this.proj=null,this.model=r.model,this.shownOpen=r.open,this.stats=r.stats}this.prevOrder=this.orders.get(e.join(`/`))}let r=jn(),i=n||e.has(`journal`)||e.has(`live`)||r!==this.locale;(i||e.has(`sort`))&&this.build(i,r)}build(e,t){let n=this.model;if(!n)return;let r=this.proj,{path:i,loop:a}=Fu(this.segments),o={plan:this.plan,journal:this.journal,run:this.run,live:this.live,links:this.links};if(e){this.locale=t,this.states=fu(this.live),this.input=ku(n,o,!a);let e=Va(this.input,this.prevOrder,this.down);this.tall=!this.down&&!a&&Xu(Ha(e).span,this.graphWidth()),this.tall&&(e=Va(this.input,this.prevOrder,!0)),this.graph=ql(n,e),this.orders.set(i.join(`/`),e.order),this.lights=function(e,t,n){let r=n.nodes.flatMap(e=>[...e.units,...e.single].filter(e=>e!==null).map(t=>[cu(e.id,t),t])),i=new Map(r.map(([e,t])=>[e,t.key])),a=new Map;return n=>{let o=a.get(n);if(o)return o;let s=function(e,t,n){let r=e.filter(e=>e.unit?e.unit===n:e.key===n).map(e=>e.key),i=new Set(r),a=e=>{let t=new Set(r),n=[...r];for(let r=n.pop();r!==void 0;r=n.pop())for(let a of e(r))t.has(a)||(t.add(a),i.add(a),n.push(a))};return a(e=>t.waiters.get(e)??[]),a(e=>t.byKey.get(e)?.after??[]),i}(e.nodes,t,i.get(n)??n),c=new Set(r.filter(([,e])=>e.keys.some(e=>s.has(e))).map(([e])=>e));return a.set(n,c),c}}(this.plan,this.links,this.graph)}let s=a&&r?Mu(this.plan,i,a,this.graph.order,this.sort,o,r):null;this.matrix=s?.matrix??null,this.matrixIn=s?.input??null}connectedCallback(){super.connectedCallback(),this.addEventListener(`keydown`,this.onEscape),this.resize=new ResizeObserver(()=>{let e=this.clientWidth,t=e>0&&e<640;t!==this.down&&(this.down=t);let n=e>0?Ju(this.graphWidth()):this.budget;n!==this.budget&&(this.budget=n);let r=e===0||e>=1500;r!==this.wide&&(this.wide=r)}),this.resize.observe(this)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`keydown`,this.onEscape),this.resize?.disconnect()}memory(){return this.opened&&this.closed&&this.memRun===this.run||(this.memRun=this.run,this.opened=new Zn(`graph-open:${this.run}`,this),this.closed=new Zn(`graph-closed:${this.run}`,this)),{opened:this.opened,closed:this.closed}}openMode(){let{opened:e}=this.memory();return e.has(Zu)?`all`:e.has(Qu)?`none`:`auto`}setMode(e){let{opened:t,closed:n}=this.memory();t.clear(),n.clear(),e===`all`&&t.set(Zu,!0),e===`none`&&t.set(Qu,!0),Gn(),this.rev++}placeOfNode(e){let t=this.graph.nodes.find(t=>t.id===e);if(!t||t.type!==`flow`)return null;let n=e.includes(`::`)?e.slice(e.lastIndexOf(`::`)+2):e;return Yl(t.layer,n)}toggle(e,t){let n=e.startsWith(`fx::`)?e.slice(4):this.placeOfNode(e);if(!n)return;let{opened:r,closed:i}=this.memory();r.set(n,t),i.set(n,!t),Gn(),this.focusToggle=t?`${Jl}${n}`:this.nodeIdOf(n),this.rev++}nodeIdOf(e){let t=this.stats.get(e);if(!t)return``;let n=t.parent;return n!==null&&this.shownOpen.has(n)?`${n}::${t.id}`:t.id}updated(){if(this.focusToggle){let e=this.focusToggle;this.focusToggle=``;let t=this.renderRoot.querySelector(`cae-layered-graph`);t&&t.updateComplete.then(()=>t.focusToggle(e))}if(this.fixLayer!==null){let e=this.fixLayer;this.fixLayer=null,this.replacing=!0,Q(this,`ca-navigate`,{layer:e,unit:this.unit,sel:this.sel,replace:!0})}if(this.refocus||this.cameFrom){let e=this.cameFrom;this.refocus=!1,this.cameFrom=``;let t=e.startsWith(`loop:`)?e:this.graph.nodes.find(t=>t.type===`flow`&&t.name===e)?.id??null,n=this.renderRoot.querySelector(`cae-layered-graph`);n&&n.updateComplete.then(()=>n.focusItem(e?t:null))}}render(){if(!this.plan.nodes.length)return k`<div class="blank" style="padding:24px">${this.live?E(`No tasks scheduled yet`):E(`No tasks scheduled`)}</div>`;let e=this.renderGraph();return this.tree.length?this.wide?k`<div class="whole">${Gu(this.oh,this.tree)}<div class="g">${e}</div></div>`:k`<details class="odet"><summary>${E(`Outline of the flow`)}</summary>${Gu(this.oh,this.tree)}</details>${e}`:e}renderGraph(){let e=lu(this.graph,this.matrix,this.sel),t=this.graph.nodes.some(e=>e.type===`flow`);return k`<cae-layered-graph .graph=${this.input} .states=${this.states} .selected=${this.sel||null} .highlight=${this.unit||null} .order=${this.prevOrder} key=${this.segments.join(`/`)} direction=${this.down||this.tall?`down`:`across`} .matrix=${this.matrixIn} .related=${this.lights} .strings=${function(e,t){let n=E(`Enter: open`);return{graph:E(`Graph`,{id:`view-graph`}),table:E(`Table`,{id:`view-table`}),view:E(`View`),zoomIn:E(`Zoom in`),zoomInTip:E(`Zoom in (Ctrl + scroll)`),zoomOut:E(`Zoom out`),zoomOutTip:E(`Zoom out (Ctrl + scroll)`),showAll:E(`Show all`),graphKeys:[E(`Tab: next node`),E(`Arrow keys: marks`),E(`Shift + arrow keys: earlier and later tasks`),n],tableKeys:[E(`Tab: next row`),n],matrixKeys:[E(`Arrow keys: marks`),n],clearKey:E(`Esc: clear selection`),upKey:e?E(`Esc: up a level`):``,inspector:E(`Selected item`),stubTip:E(`Outside this layer`),more:e=>E(T`+${e}`),badge:E(`number of passes`),solidEdge:E(`waits for output`),dashedEdge:E(`created after result`),cycle:E(`next pass`),drill:E(`has a level below`),open:E(`Show inside`),close:E(`Hide inside`),iconNames:{agent:E(`agent task`),python:E(`Python task`)},nameHeader:E(t?`Kind or function`:`Kind`),statusHeader:E(`Status`,{id:`status`}),solidHeader:E(`Waits for`),dashedHeader:E(`Created after`),laterHeader:E(`Later tasks`),none:E(`none`,{id:`none`}),inCluster:e=>E(T`${e} in the loop`),list:e=>Mo(e)}}(!!Lu(this.segments,this.auto),t)} .matrixStrings=${{sortBy:E(`Sort units`),rowsHeader:E(`Unit`)}} .renderIcon=${td} .iconStyles=${qu} @cae-select=${this.onSelect} @cae-activate=${this.onActivate} @cae-drill=${this.onDrill} @cae-view-change=${this.onView} @cae-toggle=${this.onToggle} @cae-sort=${e=>this.sort=e.detail.id}>
|
|
396
|
+
<div slot="crumbs">${function(e,t=null){let n=e.segments,r=e.unit;if(!n.length&&!r&&!t)return j;let{path:i,loop:a}=Fu(n),o=[...i.map((e,t)=>({name:Cl(e),tip:e,to:i.slice(0,t+1)})),...(a?a.slice(5).split(`.`):[]).map((t,n,r)=>{let a=gl+r.slice(0,n+1).join(`.`),o=e.graph.boxes.find(e=>e.id===a)?.file||e.matrix?.box.file||``,s=/^\d+$/.test(t);return{name:E(s?T`Loop at ${vu(t,o)}`:`Loop`),tip:s&&o?`${o}:${t}`:``,to:[...i,a]}})];return k`<div class="bar">
|
|
397
|
+
${n.length?k`<nav aria-label=${E(`Pipeline layer`)}>
|
|
398
|
+
<ol class="crumbs">
|
|
399
|
+
<li><button type="button" @click=${()=>Vu(e,[])}>${E(`Pipeline`)}</button></li>
|
|
400
|
+
${o.map((t,n)=>k`<li><span class="sep" aria-hidden="true">›</span>
|
|
401
|
+
${n===o.length-1?k`<span aria-current="page" title=${t.tip||j}>${t.name}</span>`:k`<button type="button" title=${t.tip||j} @click=${()=>Vu(e,t.to)}>${t.name}</button>`}</li>`)}
|
|
402
|
+
</ol>
|
|
403
|
+
</nav>`:j}
|
|
404
|
+
${r?k`<span class="pin">${E(T`Unit: ${r}`)}
|
|
405
|
+
<button type="button" class="switch" @click=${()=>Q(e.el,`ca-navigate`,{unit:``})}>${E(`Clear highlight`)}</button></span>`:j}
|
|
406
|
+
${t??j}
|
|
407
|
+
</div>`}(this.h,Fu(this.segments).loop?null:function(e,t){let n=(n,r)=>k`<button type="button" class="switch" aria-pressed=${e===n} @click=${()=>t(e===n?`auto`:n)}>${r}</button>`;return k`<span class="opens">${n(`all`,E(`Show all inside`))}${n(`none`,E(`Hide all inside`))}</span>`}(this.openMode(),e=>this.setMode(e)))}${function(e){if(!e)return j;let t=e.split(`/`),n=t[t.length-1]||e;return k`<div class="missing" role="status" title=${e}>${E(k`No layer <code>${n}</code> in this run`)}</div>`}(this.missing)}</div>
|
|
408
|
+
${e?function(e,t){return k`<div slot="inspector" class="card">${function(e,t){let n=(e,t)=>k`<dt>${e}</dt><dd>${t}</dd>`,r=(e,t,n=!1)=>k`<button type="button" class="go ${n?`primary`:``}" @click=${t}>${e}</button>`,i=k`<button type="button" class="switch" @click=${()=>Bu(e,``)}>${E(`Clear selection`)}</button>`,a=e=>e.length?Mo(e):E(`none`,{id:`none`});if(t.type===`box`){let a=t.box,o=vu(a.loop,a.file);return k`<h4 title=${a.file?`${a.file}:${a.loop}`:j}>${Za(16)}${E(T`Loop at ${o}`)}</h4>
|
|
409
|
+
<dl>
|
|
410
|
+
${n(E(`Passes`),Qo(a.passes))}
|
|
411
|
+
${a.spread.length>1?n(E(`Units by number of passes`),es(a.spread)):j}
|
|
412
|
+
</dl>
|
|
413
|
+
<div class="acts">${r(E(T`Passes of the loop at ${o}`),()=>Wu(e,t),!0)}${i}</div>`}if(t.type===`node`){let o=t.node,s=o.counts,{waits:c,after:l,feeds:u}=xu(o,e.graph),d=_u(o,e.live).map(([e,t])=>k`<div class=${e}>${t}</div>`);return o.type===`flow`?k`<h4 title=${o.name}>${Qa()}${o.label}</h4>
|
|
414
|
+
<div class="sub">${E(`Function`)}</div>
|
|
415
|
+
<dl>
|
|
416
|
+
${n(E(`Flow calls`),o.calls)}
|
|
417
|
+
${o.timeBox?n(E(`Deadline`),k`<span title=${Ws()}>${function(e){let t=e.finishing_kinds??[];return K(z(e.deadline_s),e.grace_s&&t.length?E(T`finishing time ${z(e.grace_s)}`):``,t.length?E(T`finishing kinds: ${Mo(t)}`):``)}(o.timeBox)}</span>`):j}
|
|
418
|
+
${n(E(`Tasks`,{id:`tasks`}),k`${hu(s)}${d}`)}
|
|
419
|
+
${n(E(`Waits for`),a(c))}
|
|
420
|
+
${l.length?n(E(`Created after`),a(l)):j}
|
|
421
|
+
${n(E(`Later tasks`),a(u))}
|
|
422
|
+
</dl>
|
|
423
|
+
<div class="acts">${r(E(T`Inside ${o.label}`),()=>Wu(e,t),!0)}${i}</div>`:k`<h4>${o.executor&&o.executor!==`mixed`?Ru(o.executor===`python`):j}${o.label}</h4>
|
|
424
|
+
<div class="sub">${yu(o)}</div>
|
|
425
|
+
<dl>
|
|
426
|
+
${o.kinds.length>1?n(E(`Kinds`),Mo(o.kinds)):j}
|
|
427
|
+
${n(E(`Tasks`,{id:`tasks`}),k`${hu(s)}${d}`)}
|
|
428
|
+
${n(E(`Waits for`),a(c))}
|
|
429
|
+
${l.length?n(E(`Created after`),a(l)):j}
|
|
430
|
+
${n(E(`Later tasks`),a(u))}
|
|
431
|
+
</dl>
|
|
432
|
+
<div class="acts">${r(E(T`Tasks of ${o.label}`),()=>Wu(e,t),!0)}${i}</div>`}let{node:o,mark:s,passes:c}=t,l=q({kind:(s.flow||s.count!==1?void 0:e.links.byKey.get(s.key))?.kind??o.label,unit:s.unit}),u=s.flow||s.state!==`blocked`?``:Tu(e)(s.key),d=k`<span data-status class=${s.state===`failed`?`err`:s.state===`blocked`||s.state===`partial`?`warn`:``}>${pu(s.state,e.live)}</span>`,p=fu(e.live)[s.state],m=k`<h4 title=${s.flow?E(T`Flow call ${s.key}`):s.key}><i class="mark" data-tone=${I(p?.tone)} data-shape=${p?.shape??j} aria-hidden="true"></i>${l}</h4>`,h=c.length?Mo(c.map(Zo)):s.passes?$o(s.passes):``;if(s.flow){let a=s.counts;return k`${m}
|
|
433
|
+
<dl>
|
|
434
|
+
${n(E(`Status`,{id:`status`}),d)}
|
|
435
|
+
${h?n(E(`Pass`),h):j}
|
|
436
|
+
${s.deadlineAt?n(E(`Deadline`),k`<span title=${Ws()}>${g=s.deadlineAt,G(g,!0)}</span>`):j}
|
|
437
|
+
${a?n(E(`Tasks`,{id:`tasks`}),k`${hu(a)}${gu(a,e.live).map(e=>k`<div>${e}</div>`)}`):j}
|
|
438
|
+
${s.error===void 0?j:n(E(`Error`),k`<span class="err">${s.error||E(`Flow call stopped with an error`)}</span>`)}
|
|
439
|
+
</dl>
|
|
440
|
+
<div class="acts">${r(E(T`Inside ${Cl(s.flow)}`),()=>Wu(e,t),!0)}${i}</div>`}var g;let _=e.journal.filter(e=>s.keys.includes(e.key)).filter(f),v=_.map(e=>e.cost_usd).filter(e=>typeof e==`number`),y=_.reduce((e,t)=>e+(t.wall_s??0),0);return k`${m}
|
|
441
|
+
<dl>
|
|
442
|
+
${n(E(`Status`,{id:`status`}),u?k`${d}<div>${u}</div>`:d)}
|
|
443
|
+
${h?n(E(`Pass`),h):j}
|
|
444
|
+
${s.count>1?n(E(`Tasks`,{id:`tasks`}),E(T`${s.count} tasks`)):j}
|
|
445
|
+
${n(E(`Attempts`),_.length||E(`none`,{id:`none`}))}
|
|
446
|
+
${n(E(`Time`),_.length?z(y):E(`none`,{id:`none`}))}
|
|
447
|
+
${n(E(`Cost`),v.length?Y(v.reduce((e,t)=>e+t,0)):`—`)}
|
|
448
|
+
</dl>
|
|
449
|
+
<div class="acts">${r(E(`Task detail`),()=>Wu(e,t),!0)}${o.kinds.length===1?r(E(T`Tasks of ${o.label}`),()=>Hu(e,o)):j}${i}</div>`}(e,t)}</div>`}(this.h,e):j}
|
|
450
|
+
</cae-layered-graph>`}graphWidth(){let e=this.clientWidth||1200;return this.tree.length&&e>=1500?e-300:e}currentKeys(){let{path:e}=Fu(this.segments),t=new Set;for(let n of this.flowStats.values()){let r=n.layer.length;r<e.length&&Sl(e,n.layer)&&e[r]===n.name&&t.add(n.key)}return t}selectedItem(){let e=this.sel;if(!e)return``;if(e.startsWith(`fx::`))return e.slice(4);let t=e.split(`#`)[0]??``;if(this.graph.nodes.find(e=>e.id===t)?.type===`flow`)return this.placeOfNode(t)??``;let n=this.graph.boxes.find(e=>e.id===t);return n?`${n.layer.join(`/`)}|${n.local}`:``}drawnId(e){let{path:t}=Fu(this.segments);if(e.layer.length<t.length||!Sl(e.layer,t))return null;let n=[];for(let r=this.flowStats.get(e.type===`fn`?this.flowStats.get(e.id)?.parent??``:this.containerKey(e)??``);r&&r.layer.length>=t.length;r=this.flowStats.get(r.parent??``))n.unshift(r.key);let r=n[n.length-1]??``;if(e.type===`fn`){let t=this.flowStats.get(e.id);return t?this.shownOpen.has(e.id)?{id:`${Jl}${e.id}`,open:n}:{id:r?`${r}::${t.id}`:t.id,open:n}:null}return{id:r?`${r}::${e.name}`:e.name,open:n}}containerKey(e){let{path:t}=Fu(this.segments);if(e.layer.length===t.length)return``;for(let t of this.flowStats.values())if([...t.layer,t.name].join(`/`)===e.layer.join(`/`))return t.key;return null}outlineHost(){let e=this;return{get live(){return e.live},expanded(t){let n=e.folds.get(t);if(n!==void 0)return n;let r=new Set([...e.currentKeys(),...e.shownOpen,e.selectedItem()]),i=e=>r.has(e.id)||e.kids.some(i),a=nd(e.tree,t);return!!a&&(e.tree.includes(a)||i(a))},expand(t,n){e.folds.set(t,n),e.requestUpdate()},current:t=>e.currentKeys().has(t),here:t=>{let{path:n}=Fu(e.segments),r=e.flowStats.get(t);return!!r&&r.layer.length===n.length-1&&Sl(n,[...r.layer,r.name])},selected:t=>!!t&&e.selectedItem()===t,pick(t){let n=e.drawnId(t);if(!n){let n=t.type===`fn`?e.flowStats.get(t.id)?.id??``:t.name;Q(e,`ca-navigate`,{layer:t.layer.join(`/`)===e.auto.join(`/`)?``:t.layer.join(`/`),unit:e.unit,sel:n});return}let{opened:r,closed:i}=e.memory(),a=!1;for(let t of n.open)e.shownOpen.has(t)||(a=!0),r.set(t,!0),i.set(t,!1);a&&e.rev++,Bu(e.h,n.id)},enter(t){let n=t.parts[t.parts.length-1]??t;Vu(e.h,[...n.layer,n.name])}}}partsHost(){let e=this;return{el:e,get plan(){return e.plan},get journal(){return e.journal},get run(){return e.run},get live(){return e.live},get sel(){return e.sel},get unit(){return e.unit},get segments(){return e.segments},get auto(){return e.auto},get graph(){return e.graph},get matrix(){return e.matrix},get links(){return e.links}}}};ed=U([N(`ca-pipeline-graph`),D()],ed);var td=e=>Ru(e===`python`);function nd(e,t){for(let n of e){if(n.id===t)return n;let e=nd(n.kids,t);if(e)return e}}function rd(e){if(!e||e.policy===`off`)return[];let t=[...(e.stopped??[]).map(e=>({label:wc(),text:e,tone:`failed`,tip:``})),...(e.kept??[]).map(e=>({label:wc(),text:K(e.kind,xc(e.agent,e.model),e.reason),tone:`attention`,tip:E(`A kind with no available model, run on its own model (kept)`)})),...(e.substituted??[]).map(e=>({label:E(`Model replaced`),text:Cc(e),tone:`attention`,tip:E(`A kind with no available model, run on the first model that answered (substitute)`)})),...(e.dropped??[]).map(e=>({label:E(`Unavailable`),text:Sc(e),tone:`muted`,tip:``}))];return t.length?t:[{label:``,text:E(`all models available`),tone:`neutral`,tip:``}]}var id={failed:`✕`,attention:`◌`,done:`✓`,running:``,muted:`■`,neutral:`■`},ad=class extends M{constructor(...e){super(...e),this.procs=null,this.plan={nodes:[],groups:[]}}static{this.styles=[V,qr,O` :host{display:block;}.drv{display:flex;gap:14px;align-items:flex-start;}.drv-ic{width:42px;height:42px;border-radius:12px;flex:none;display:grid;place-items:center;font-size:16px;background:var(--raise);color:var(--text-muted);}.drv.on .drv-ic{background:var(--status-running-bg);box-shadow:0 0 0 1px color-mix(in srgb,var(--status-running) 35%,transparent),0 0 22px var(--status-running-bg);}.drv-ic[data-tone]{color:var(--tone);font-weight:700;}.drv-ic[data-tone='failed'],.drv-ic[data-tone='attention']{background:var(--tone-bg);}.drv.on .drv-ic .spin{width:18px;height:18px;}.drv-t{font-size:15px;font-weight:600;}.drv-up{font-family:var(--mono);font-size:12px;color:var(--status-running);margin-left:6px;font-weight:400;}.drv-cmd{margin-top:8px;}.drv-cmd summary{cursor:pointer;font-size:11px;color:var(--text-muted);}.pf{margin-top:10px;font-size:12px;}.pf-h{color:var(--text-muted);font-size:11px;margin-bottom:4px;}.pf-rows{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:3px 12px;margin:0;}.pf-rows dt{color:var(--text-muted);}.pf-rows dt[data-tone]{color:var(--tone);}.pf-rows dd{margin:0;color:var(--text-2);overflow-wrap:anywhere;}.drv-cmd code{display:block;margin-top:4px;white-space:pre-wrap;word-break:break-all;color:var(--text-2);max-height:120px;overflow:auto;}`]}stateTitle(){if(this.plan.preflight?.stopped?.length)return[E(`Ended before the first agent session`),`failed`];if(!this.plan.nodes.length)return[E(`Not running`),`neutral`];let e=te(this.plan);return e.failed?[e.failed===1?E(`Finished with 1 task failed`):E(T`Finished with ${e.failed} tasks failed`),`failed`]:e.left?[e.left===1?E(`Finished with 1 task not done`):E(T`Finished with ${e.left} tasks not done`),`attention`]:e.notStarted?[e.notStarted===1?E(`Finished with 1 task not started`):E(T`Finished with ${e.notStarted} tasks not started`),`attention`]:[E(`Finished`),`done`]}render(){let e=this.procs,t=this.summary;if(!e?.alive){let e=re(t)===`unresponsive`,[r,i]=e?[ko(Is()),`attention`]:this.stateTitle(),a=e?null:ne(t);return k`<div class="drv off">
|
|
451
|
+
<div class="drv-ic" data-tone=${I(i)} aria-hidden="true">${id[i]}</div>
|
|
452
|
+
<div>
|
|
453
|
+
<div class="drv-t tone-text" data-tone=${i===`done`?j:I(i)}>${r}</div>
|
|
454
|
+
<div class="meta">${K(this.plan.preflight?.stopped?.length?(n=this.plan.preflight.stopped,E(T`No available model for ${Mo(n)}`)):``,e?Rs(this.host):``,E(t?.last_ts?e?T`Last activity ${G(t.last_ts,!0)}`:T`Ended ${G(t.last_ts,!0)}`:`No activity`),a==null?``:E(T`Took ${z(a)}`),t?.run_group?E(T`Run group ${t.run_group}`):``,e?zs(t?.host_id??``):``)}</div>
|
|
455
|
+
${this.preflight()}
|
|
456
|
+
</div>
|
|
457
|
+
</div>`}var n;let r=Date.parse(e.started_at),i=Ir.at(`drv:${e.pid??``}`,Number.isNaN(r)?1:(Date.now()-r)/1e3),a=[[E(`PID`),e.pid??`—`],[E(`Run group`),e.run_group],[E(`Running at once (limit)`),e.max_workers||`—`],[E(`Started`),G(e.started_at,!0)]];return k`<div class="drv on">
|
|
458
|
+
<div class="drv-ic"><span class="spin"></span></div>
|
|
459
|
+
<div style="min-width:0">
|
|
460
|
+
<div class="drv-t">${E(`Running`)} <cae-elapsed class="drv-up" .since=${i}></cae-elapsed></div>
|
|
461
|
+
<div class="drv-facts">${a.map(([e,t])=>k`<span><i>${e}</i>${t}</span>`)}</div>
|
|
462
|
+
${this.preflight()}
|
|
463
|
+
<details class="drv-cmd"><summary>${E(`Command line`)}</summary><code>${e.argv.join(` `)}</code></details>
|
|
464
|
+
</div>
|
|
465
|
+
</div>`}preflight(){let e=this.plan.preflight,t=rd(e);return e&&t.length?k`<div class="pf">
|
|
466
|
+
<div class="pf-h" title=${n=e.policy,E(T`One request to each model before the first agent session (preflight, policy ${n})`)}>${E(`Model availability`)}</div>
|
|
467
|
+
<dl class="pf-rows">
|
|
468
|
+
${t.map(e=>k`<dt data-tone=${I(e.tone)} title=${e.tip||j}>${e.label}</dt><dd class="jmono">${e.text}</dd>`)}
|
|
469
|
+
</dl>
|
|
470
|
+
</div>`:j;var n}};U([P({attribute:!1})],ad.prototype,`procs`,void 0),U([P({attribute:!1})],ad.prototype,`summary`,void 0),U([P({attribute:!1})],ad.prototype,`plan`,void 0),U([P({attribute:!1})],ad.prototype,`host`,void 0),ad=U([N(`ca-run-driver`),D()],ad),R(`cae-lanes`,$i);var od=216e5,sd=e=>new Date(e).toLocaleTimeString(jn(),{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hourCycle:`h23`});function cd(){return{py:{label:E(`Python task`),color:`var(--meter)`},llm:{label:E(`Agent task`),color:`var(--agent)`},run:{label:E(`running`),color:`var(--status-running)`,pattern:`striped`,group:1},bad:{label:E(`failed`),color:`var(--status-failed)`,pattern:`hatched`,group:1},idle:{label:E(`not started`),color:`var(--line2)`,pattern:`outline`,group:1}}}function ld(e,t,n,r){if(!f(e)){let t=n.get(e.key),i=e.stop===`invalid_input`&&t?Ko(t,n,r):``;return[q(e),i?E(T`Not started: ${i}`):Z(e.stop,e.reason),e.key].join(`
|
|
471
|
+
`)}let i=ws(e.hops,null,e.skipped_hops),a=e.reason&&!e.ok?w(e.reason,r):``;return[q(e),K(Z(e.stop),z(e.wall_s),E(T`ended ${sd(t)}`)),i?E(T`Model switch: ${i}`):e.model?E(T`Model ${e.model}`):``,a,e.key].filter(Boolean).join(`
|
|
472
|
+
`)}function ud(e,t,n,r){let i=[];if(e.forEach((e,t)=>{if(!e.ts)return;let a=Date.parse(e.ts);if(Number.isNaN(a))return;let o=f(e)?e.ok?C(e)?`py`:`llm`:`bad`:`idle`;i.push({lane:e.kind||`?`,bar:{id:`j${t}`,style:o,start:a-1e3*(e.wall_s||0),end:a,label:ld(e,a,n,r)}})}),!i.length&&!t.length)return null;let a=Math.max(...i.map(e=>e.bar.end),...t.map(e=>e.t0)),o=i.filter(e=>e.bar.end>=a-od),s=i.length-o.length;t.forEach((e,t)=>o.push({lane:e.kind,bar:{id:`live${t}`,style:`run`,start:e.t0,end:null,label:`${e.kind}\n${E(`running`)}`}}));let c=new Map;for(let{lane:e,bar:t}of[...o].sort((e,t)=>e.bar.start-t.bar.start))(c.get(e)??c.set(e,[]).get(e)).push(t);return{lanes:[...c].map(([e,t])=>({id:e,label:e,bars:t})),omitted:s}}var dd=class extends M{constructor(...e){super(...e),this.journal=[],this.plan=null,this.procs=null,this.live=!1,this.run=``}static{this.styles=[V,O`:host{display:block;}`]}render(){let e=Date.now(),t=this.live?pe(this.procs).map(t=>({kind:t.kind,cls:t.cls,t0:Ir.at(t.id,t.ageS,e)})):[],n=ud(this.journal,t,S(this.journal,this.plan).outcomes,this.run);return n?to(this.run,k`<cae-lanes .lanes=${n.lanes} .barStyles=${cd()} .omitted=${n.omitted} ?live=${this.live} locale=${jn()} .strings=${{omitted:e=>E(e===1?`1 older attempt not shown`:T`${e} older attempts not shown`)}}></cae-lanes>`):k`<div class="blank" style="padding:28px"><span class="ic" aria-hidden="true">⏱</span>${this.live?E(`No finished attempts yet`):E(`No finished attempts`)}</div>`}};U([P({attribute:!1})],dd.prototype,`journal`,void 0),U([P({attribute:!1})],dd.prototype,`plan`,void 0),U([P({attribute:!1})],dd.prototype,`procs`,void 0),U([P({type:Boolean})],dd.prototype,`live`,void 0),U([P()],dd.prototype,`run`,void 0),dd=U([N(`ca-timeline`),D()],dd);var fd=class extends M{constructor(...e){super(...e),this.procs=null,this.live=!1}static{this.styles=[V,O` :host{display:block;container-type:inline-size;}.wks{display:grid;grid-template-columns:repeat(var(--n,3),minmax(0,1fr));gap:10px;}@container (max-width:860px){.wks{grid-template-columns:repeat(2,minmax(0,1fr));}}@container (max-width:360px){.wks{grid-template-columns:minmax(0,1fr);}}.wk{border-radius:11px;padding:10px 12px;border:1px solid var(--line);background:color-mix(in srgb,var(--text) 2.5%,transparent);min-width:0;position:relative;overflow:hidden;display:block;width:100%;color:inherit;text-align:start;}.wk>.meta{display:block;}.wk.py,.wk.llm{border-color:var(--line2);}.wk.llm{box-shadow:inset 3px 0 0 -1px color-mix(in srgb,var(--agent) 60%,transparent);cursor:pointer;}.wk.llm:hover{border-color:var(--accent);}.wk.idle{opacity:0.45;border-style:dashed;}.wk-top{display:flex;align-items:center;gap:8px;min-width:0;}.wk-top b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.wk-ic{width:24px;height:24px;border-radius:7px;flex:none;display:grid;place-items:center;background:var(--raise);font-size:12px;}.wk.llm .wk-ic{color:var(--agent);}.wk.py .wk-ic{color:var(--text-muted);}.wk-el{margin-left:auto;font-family:var(--mono);font-size:11.5px;color:var(--status-running);}.wk-bar{position:absolute;left:0;right:0;bottom:0;height:2px;overflow:hidden;}.wk-bar i{position:absolute;top:0;bottom:0;width:30%;background:linear-gradient(90deg,transparent,var(--status-running),transparent);animation:scan 1.8s linear infinite;}`]}render(){let e=this.live?pe(this.procs):[],t=Math.max(this.procs?.max_workers||1,e.length),n=Array.from({length:t-e.length},(e,t)=>t);return k`<div class="wks" style="--n:${Math.min(t,6)}">
|
|
473
|
+
${H(e,e=>e.id,e=>{let t=k`<span class="wk-top">${Ru(e.cls!==`llm`,e.cls===`llm`?E(`Agent task`):E(`Python task`),`wk-ic`)}<b>${e.kind}</b>
|
|
474
|
+
<cae-elapsed class="wk-el" .since=${Ir.at(e.id,e.ageS)}></cae-elapsed></span>
|
|
475
|
+
<span class="meta">${e.detail}</span>
|
|
476
|
+
<span class="wk-bar"><i></i></span>`;return e.key?k`<button type="button" class="wk ${e.cls}" @click=${()=>Q(this,`ca-open-task`,{key:e.key})}>${t}</button>`:k`<div class="wk ${e.cls}">${t}</div>`})}
|
|
477
|
+
${n.map(()=>k`<div class="wk idle"><div class="wk-top"><b>${E(`Idle`)}</b></div></div>`)}
|
|
478
|
+
</div>`}};U([P({attribute:!1})],fd.prototype,`procs`,void 0),U([P({type:Boolean})],fd.prototype,`live`,void 0),fd=U([N(`ca-workers`),D()],fd);var pd=[`invalid`,`refused`,`failed`,`running`,`pending`,`valid`];function md(e){if(e.title)return e.title;if(e.type===`tiles`){let t=e.tiles[0];return t?`${t.label}: ${String(t.value)}`:``}if(e.type===`blocks`)for(let t of e.blocks){let e=he(t),n=e?md(e):``;if(n)return n}return``}function hd(e){if(e===void 0)return E(`Loading…`);let t=he(e);if(t)return md(t);if(typeof e!=`object`||!e)return JSON.stringify(e);let n=Object.keys(e);if(!n.length)return E(`none`,{id:`none`});let r=`${n.slice(0,4).join(`, `)}${n.length>4?`, …`:``}`;return E(Array.isArray(e)?T`${n.length} items: ${r}`:T`${n.length} keys: ${r}`)}var gd=class extends M{constructor(...e){super(...e),this.run=``,this.layer=``,this.unit=``,this.sel=``}static{this.styles=[V,O` :host{display:block;container-type:inline-size;}.ov{display:flex;flex-direction:column;gap:14px;}.band.status{display:grid;gap:14px;align-items:stretch;}.stack{display:flex;flex-direction:column;gap:14px;min-width:0;}.stack>.panel:first-child{flex:1;}.band.parts{display:grid;gap:14px;align-items:stretch;grid-template-columns:repeat(auto-fit,minmax(min(100%,max(440px,calc((100% - 14px) / 2))),1fr));}@container (min-width:894px){.band.parts>.panel:last-child:nth-child(odd){grid-column:1 / -1;}}.stack{grid-area:stack;}.problems{grid-area:problems;}.outputs{grid-area:outputs;}.row{grid-area:running;}.band.status{grid-template-areas:'stack' 'problems' 'outputs' 'running';}@container (min-width:760px){.band.status{grid-template-columns:minmax(240px,1fr) minmax(0,1.4fr);grid-template-areas:'stack problems' 'outputs outputs' 'running running';}}@container (min-width:1100px){.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';}}.ok{display:flex;align-items:baseline;gap:6px;color:var(--text-2);}.ok span[aria-hidden]{color:var(--status-done);}.ofl{grid-template-columns:max-content minmax(0,1fr);}.ofl>.jstop{white-space:nowrap;}.ofl>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.ofl>.meta{grid-column:1 / -1;overflow:hidden;text-overflow:ellipsis;}.ct-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px;}.pcards{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(320px,100%),1fr));gap:12px;}.pcard{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 12px;align-items:start;padding:12px 14px;border-radius:10px;background:var(--raise);border:1px solid var(--line);cursor:pointer;transition:border-color 0.15s,transform 0.15s;text-align:left;color:inherit;font:inherit;width:100%;min-width:0;}.pcard>div{min-width:0;}.pcard .meta{overflow-wrap:anywhere;}.pcard:hover{border-color:var(--accent);transform:translateY(-1px);}.pc-ic{width:34px;height:34px;display:grid;place-items:center;border-radius:9px;background:var(--well);color:var(--text-2);font-size:16px;}.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;}.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;}.pcard:hover .pc-go{opacity:1;}.cur-units{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:8px 14px;}.cu{display:grid;grid-template-columns:90px 1fr 70px auto;gap:8px;align-items:center;}.cu-bar{height:5px;border-radius:3px;background:var(--track);overflow:hidden;}.cu-bar i{display:block;height:100%;background:var(--meter);}.fl>div.meta{grid-column:1 / 4;overflow:hidden;text-overflow:ellipsis;}.stopped{grid-column:1 / 4;color:var(--text-muted);font-size:11px;display:flex;flex-wrap:wrap;align-items:center;gap:4px;}.fl.muted{opacity:0.7;}.problems h4.sub{margin:10px 0 2px;font-size:11px;font-weight:600;color:var(--text-muted);display:flex;}.problems h4.sub .r{margin-left:auto;font-weight:400;}.next{margin:10px 2px 2px;font-size:12px;color:var(--text-2);}.next code{font-family:var(--mono);}.more{font-size:12px;margin:6px 10px 0;}`]}go(e){Q(this,`ca-navigate`,{tab:e})}open(e){Q(this,`ca-open-task`,{key:e.key,...C(e)?{view:`output`}:{}})}render(){let e=this.state,t=fe(e,this.summary),n=t?pe(e.procs).length:0,r=e.procs?.max_workers||null,i=this.info.panels.filter(ge),a=t&&n>0;return k`<div class="ov">
|
|
479
|
+
<div class="band status">
|
|
480
|
+
<div class="stack">
|
|
481
|
+
<section class="panel enter">
|
|
482
|
+
<h3>${E(`Run`)}</h3>
|
|
483
|
+
<ca-run-driver .procs=${e.procs} .summary=${this.summary} .plan=${e.plan} .host=${this.host}></ca-run-driver>
|
|
484
|
+
</section>
|
|
485
|
+
${t&&!a?this.runningCard(t,n,r):j}
|
|
486
|
+
</div>
|
|
487
|
+
<section class="panel enter problems">
|
|
488
|
+
<h3>${E(`Problems`)}
|
|
489
|
+
<span class="r"><a class="lnk" href="#" @click=${e=>this.nav(e,()=>Q(this,`ca-navigate`,{tab:`journal`,stop:`bad`}))}>${E(`Failed attempts in history`)}</a></span></h3>
|
|
490
|
+
${this.problems(t)}
|
|
491
|
+
</section>
|
|
492
|
+
<section class="panel enter outputs">
|
|
493
|
+
<h3 title=${E(`Checked files (OutputContract, InputContract)`)}>${E(`Outputs`)}
|
|
494
|
+
<span class="r"><a class="lnk" href="#" @click=${e=>this.nav(e,()=>this.go(`outputs`))}>${E(`All outputs`)}</a></span></h3>
|
|
495
|
+
${this.outputs()}
|
|
496
|
+
</section>
|
|
497
|
+
${a?k`<div class="row">${this.runningCard(t,n,r)}</div>`:j}
|
|
498
|
+
</div>
|
|
499
|
+
<section class="panel enter">
|
|
500
|
+
<h3 title=${E(`Every task the run scheduled, by kind (plan.jsonl)`)}>${E(`Pipeline`)}
|
|
501
|
+
<span class="r">${this.progressLine(t)}</span></h3>
|
|
502
|
+
<ca-pipeline-graph .plan=${e.plan} .journal=${e.journal} .run=${this.run} .layer=${this.layer} .unit=${this.unit} .sel=${this.sel} ?live=${t}></ca-pipeline-graph>
|
|
503
|
+
</section>
|
|
504
|
+
<section class="panel enter">
|
|
505
|
+
<h3 title=${E(`Counted from every finished attempt (journal.jsonl)`)}>${E(`Totals`)}</h3>
|
|
506
|
+
<ca-kpis .journal=${e.journal} .plan=${e.plan}></ca-kpis>
|
|
507
|
+
</section>
|
|
508
|
+
<div class="band parts">
|
|
509
|
+
${t?k`<section class="panel enter">
|
|
510
|
+
<h3>${E(`Process tree`)}
|
|
511
|
+
<span class="r"><a class="lnk" href="#" @click=${e=>this.nav(e,()=>this.go(`procs`))}>${E(`All processes`)}</a></span></h3>
|
|
512
|
+
<ca-proc-tree .procs=${e.procs}></ca-proc-tree>
|
|
513
|
+
</section>`:j}
|
|
514
|
+
${De(e.journal)?k`<section class="panel enter">
|
|
515
|
+
<h3 title=${E(`Reported by the coding agents`)}>${E(`Tokens and cost by kind`)}</h3>
|
|
516
|
+
<ca-spend-breakdown .journal=${e.journal}></ca-spend-breakdown>
|
|
517
|
+
</section>`:j}
|
|
518
|
+
${e.plan.models?.length?k`<section class="panel enter">
|
|
519
|
+
<h3 title=${E(`What the agent sessions spent on each model, each model of a model switch counted separately (Plan.models)`)}>${E(`Models`)}
|
|
520
|
+
<span class="r">${e.plan.models.length===1?E(`1 model`):E(T`${e.plan.models.length} models`)}</span></h3>
|
|
521
|
+
<ca-model-usage .models=${e.plan.models}></ca-model-usage>
|
|
522
|
+
</section>`:j}
|
|
523
|
+
${Le(e.journal).length||e.plan.rests?.length?k`<section class="panel enter">
|
|
524
|
+
<h3 title=${E(`Account-wide | read at each agent session start`)}>
|
|
525
|
+
${E(`Subscription usage`)}<span class="r">${E(`Per account, first → last reading`)}</span></h3>
|
|
526
|
+
<ca-quota .journal=${e.journal} .caps=${e.plan.quota_caps??[]} .rests=${e.plan.rests??[]} .rule=${e.plan.quota_rule??``} ?live=${t}></ca-quota>
|
|
527
|
+
</section>`:j}
|
|
528
|
+
${e.cursor?k`<section class="panel enter">
|
|
529
|
+
<h3 title=${E(`Stage and step per unit (CursorStore)`)}>${E(`Resume cursor`)}</h3>
|
|
530
|
+
${this.cursor()}
|
|
531
|
+
</section>`:j}
|
|
532
|
+
</div>
|
|
533
|
+
${i.length?k`<section class="panel enter views">
|
|
534
|
+
<h3 title=${E(`monitor.Panel`)}>${E(`Custom views`)}</h3>
|
|
535
|
+
${this.panelCards(i)}
|
|
536
|
+
</section>`:j}
|
|
537
|
+
<section class="panel enter">
|
|
538
|
+
<h3>${E(`Timeline`)}
|
|
539
|
+
<span class="r">${this.triesLine()}</span></h3>
|
|
540
|
+
<ca-timeline .journal=${e.journal} .plan=${e.plan} .procs=${e.procs} .live=${t} .run=${this.run}></ca-timeline>
|
|
541
|
+
</section>
|
|
542
|
+
</div>`}runningCard(e,t,n){return k`<section class="panel enter">
|
|
543
|
+
<h3 title=${E(`Limit: max_concurrent`)}>${E(`Running tasks`)}
|
|
544
|
+
${e?k`<span class="r">${E(n?T`${t} of ${n} running at once`:T`${t} running at once`)}</span>`:j}</h3>
|
|
545
|
+
${t?k`<ca-workers .procs=${this.state.procs} .live=${e}></ca-workers>`:k`<div class="meta">${E(`No tasks running`)}</div>`}
|
|
546
|
+
</section>`}outputs(){let{contracts:e,tally:t}=this.state.outputs;if(!e.length)return k`<div class="meta">${E(`No output files`)}</div>`;let n=pd.filter(e=>t[e]),r=e.flatMap(e=>(e.outputs??[]).map(t=>[e,t])).filter(([,e])=>e.status===`invalid`||e.status===`failed`),i=r.slice(0,5),a=t.refused;return k`<div class="ct-row">
|
|
547
|
+
${n.length?n.map(e=>Uc(e,t[e])):k`<span class="meta">${E(`No checked files`)}</span>`}
|
|
548
|
+
</div>
|
|
549
|
+
${i.map(([e,t])=>k`<button type="button" class="fl ofl" @click=${()=>this.go(`outputs`)}>
|
|
550
|
+
${Qr({text:t.status?Ts(t.status):`—`,tone:Uo(t.status),title:t.status?Es(t.status):null})}
|
|
551
|
+
<b class="jmono" title=${e.key}>${q({kind:e.kind,unit:e.unit===e.key?``:e.unit})}</b>
|
|
552
|
+
<span class="meta">${Kc(t)}</span>
|
|
553
|
+
<span class="meta">${w(t.errors?.[0]||t.path,this.run).slice(0,160)}</span>
|
|
554
|
+
</button>`)}
|
|
555
|
+
${r.length>i.length?k`<div class="more"><a class="lnk" href="#" @click=${e=>this.nav(e,()=>this.go(`outputs`))}>${r.length-i.length===1?E(`1 more output`):E(T`${r.length-i.length} more outputs`)}</a></div>`:j}
|
|
556
|
+
${a?k`<div class="meta more">${E(a===1?`1 output not written (task not started)`:T`${a} outputs not written (tasks not started)`)}</div>`:j}`}progressLine(e){let t=this.state.plan,n=te(t);if(e||n.left){let e=function(e){let t=e.groups.reduce((e,t)=>e+t.total,0),n=e.groups.reduce((e,t)=>e+t.done,0),r=e.groups.reduce((e,t)=>e+(t.partial??0),0),i=e.groups.reduce((e,t)=>e+t.skipped,0);return{total:t,done:n,partial:r,skipped:i,pct:Math.round(100*(n+r+i)/Math.max(1,t))}}(t);return K(E(T`${e.pct}%`),E(T`${e.done} of ${e.total} tasks done`),e.partial?X(`partial`,e.partial):``,e.skipped?X(`skipped`,e.skipped):``)}return K(X(`done`,n.done),n.skipped?X(`skipped`,n.skipped):``,n.failed?X(`failed`,n.failed):``,n.notStarted?X(`not_started`,n.notStarted):``,n.partial?X(`partial`,n.partial):``)}triesLine(){let{tries:e,notStarted:t}=S(this.state.journal,this.state.plan).tries;return K(E(e===1?`1 attempt`:T`${e} attempts`),t?X(`not_started`,t):``)}nav(e,t){e.preventDefault(),t()}cursor(){let e=this.state.cursor,t=Object.entries(e?.units??{});if(!e||!e.stage&&!t.length)return k`<div class="meta">${E(`No resume cursor`)}</div>`;let n=e.completed_stages??[];return k`<div class="chips" style="margin-bottom:10px">
|
|
557
|
+
${n.length||e.stage?k`${n.map(e=>k`<span class="chip" data-tone="done"><span aria-hidden="true">✓</span><span class="sr">${E(`done`,{id:`stage-done`})}</span> ${e}</span>`)}${e.stage?k`<span class="chip" data-tone="running"><span class="sr">${E(`current`)}</span>${e.stage}</span>`:j}`:k`<span class="meta">${E(`No stage`)}</span>`}
|
|
558
|
+
</div>
|
|
559
|
+
${t.length?k`<div class="cur-units">
|
|
560
|
+
${t.map(([e,t])=>k`<div class="cu">
|
|
561
|
+
<span class="jmono">${e}</span>
|
|
562
|
+
<span class="meta">${K(t.step||`—`,t.loop_pass?E(T`pass ${t.loop_pass}`):``)}</span>
|
|
563
|
+
<span class="cu-bar" title=${t.completed.length===1?E(`1 step done`):E(T`${t.completed.length} steps done`)}><i style="width:${Math.min(100,12*(t.completed.length+1))}%"></i></span>
|
|
564
|
+
${t.inflight.length?Zr({text:E(`running`),tone:`running`,title:t.inflight.join(`
|
|
565
|
+
`)}):j}
|
|
566
|
+
</div>`)}
|
|
567
|
+
</div>`:j}`}panelCards(e){return k`<div class="pcards">
|
|
568
|
+
${H(e,e=>e.name,e=>{let t=hd(this.state.panels[e.name]);return k`<button type="button" class="pcard" @click=${()=>this.go(`panel:${e.name}`)}>
|
|
569
|
+
<span class="pc-ic" aria-hidden="true">${e.icon||`▤`}</span>
|
|
570
|
+
<div>
|
|
571
|
+
<b>${e.title||e.name}</b>
|
|
572
|
+
${e.description?k`<div class="meta">${e.description}</div>`:j}
|
|
573
|
+
${t?k`<div class="pc-peek">${t}</div>`:j}
|
|
574
|
+
</div>
|
|
575
|
+
<span class="pc-go">${E(`Show view`)}</span>
|
|
576
|
+
</button>`})}
|
|
577
|
+
</div>`}nameButton(e){return k`<button type="button" class="fl-name jmono" title=${e.key} @click=${()=>this.open(e)}>${this.name(e)}</button>`}openRow(e,t){e.target.closest(`button`)||this.open(t)}name(e){return q(e)}problems(e){let{outcomes:t,problems:n}=S(this.state.journal,this.state.plan),{failed:r,notStarted:i,partial:a,recovered:o}=n,s=r.length+i.length+a.length,c=k`<div class="ok"><span aria-hidden="true">✓</span>${E(`No problems`)}</div>`;if(!s&&!o.length)return c;let l=e=>w(e.attempts[e.attempts.length-1]?.reason||`—`,this.run).slice(0,200),u=e=>e.length?k`<div class="stopped">
|
|
578
|
+
<span>${e.length===1?E(`1 later task not started`):E(T`${e.length} later tasks not started`)}</span>
|
|
579
|
+
${e.map(e=>Ic(this,this.name(e),e))}
|
|
580
|
+
</div>`:j;return k`${s?j:c}${H(r,e=>e.task.key,e=>{let t=e.task.attempts[e.task.attempts.length-1];return k`<div class="fl" @click=${t=>this.openRow(t,e.task)}>
|
|
581
|
+
${Qr({text:Fo(`failed`),tone:`failed`})}
|
|
582
|
+
${this.nameButton(e.task)}<span class="meta">${G(t?.ts,!0)}</span>
|
|
583
|
+
<div class="meta">${Z(t?.stop)}: ${l(e.task)}</div>
|
|
584
|
+
${u(e.stopped)}
|
|
585
|
+
</div>`})}
|
|
586
|
+
${H(i,e=>e.key,e=>k`<div class="fl" @click=${t=>this.openRow(t,e)}>
|
|
587
|
+
${Qr({text:Fo(`not_started`),tone:`attention`})}
|
|
588
|
+
${this.nameButton(e)}<span></span>
|
|
589
|
+
<div class="meta">${Ko(e,t,this.run)?ko(Ko(e,t,this.run)):l(e)}</div>
|
|
590
|
+
</div>`)}
|
|
591
|
+
${H(a,e=>e.key,e=>k`<div class="fl" @click=${t=>this.openRow(t,e)}>
|
|
592
|
+
${Qr({text:Fo(`partial`),tone:Ho(`partial`)})}
|
|
593
|
+
${this.nameButton(e)}<span></span>
|
|
594
|
+
<div class="meta">${l(e)}</div>
|
|
595
|
+
</div>`)}
|
|
596
|
+
${o.length?k`<h4 class="sub">${ko(Fo(`recovered`))} <span class="r">${o.length}</span></h4>`:j}
|
|
597
|
+
${H(o,e=>e.key,e=>{let t=e.tries.filter(e=>!e.ok).length,n=e.tries.length;return k`<div class="fl muted" @click=${t=>this.openRow(t,e)}>
|
|
598
|
+
${Qr({text:Fo(`recovered`),tone:Ho(`recovered`)})}
|
|
599
|
+
${this.nameButton(e)}<span></span>
|
|
600
|
+
<div class="meta">${E(t===1?T`Done on attempt ${n} | 1 failed attempt`:T`Done on attempt ${n} | ${t} failed attempts`)}</div>
|
|
601
|
+
</div>`})}
|
|
602
|
+
${this.nextStep(e,s)}`}nextStep(e,t){if(e||!t)return j;let n=S(this.state.journal,this.state.plan).counts,r=n.total-n.finished+n.partial;return r?k`<div class="next" title="resume=True">${E(T`${r} of ${n.total} tasks not done`)}</div>`:j}};function _d(e,t,n){let r=n.toLowerCase();return e.filter(e=>(!t||e.kind===t)&&(!r||`${e.kind} ${e.unit} ${(e.claims??[]).join(` `)} ${e.key} ${e.last_stop}`.toLowerCase().includes(r)))}U([P({attribute:!1})],gd.prototype,`state`,void 0),U([P({attribute:!1})],gd.prototype,`summary`,void 0),U([P({attribute:!1})],gd.prototype,`host`,void 0),U([P({attribute:!1})],gd.prototype,`info`,void 0),U([P()],gd.prototype,`run`,void 0),U([P()],gd.prototype,`layer`,void 0),U([P()],gd.prototype,`unit`,void 0),U([P()],gd.prototype,`sel`,void 0),gd=U([N(`ca-overview`),D()],gd),R(`cae-data-table`,Ji);var vd={failed:0,not_started:1,partial:2,running:3,waiting:4};function yd(e){return e.map((e,t)=>({t:e,i:t})).sort((e,t)=>(vd[e.t.outcome]??9)-(vd[t.t.outcome]??9)||t.t.last_ts.localeCompare(e.t.last_ts)||e.i-t.i).map(e=>e.t)}var bd=[`key`,`unit`,`stop`,`kind`,`route`,`reason`],xd=e=>new Set(m(e).map(e=>e.key)),Sd=e=>(e.rounds??1)>1;function Cd(e,t,n,r){let i=r.toLowerCase(),a=n===`retried`?xd(e):null;return e.filter(e=>!(n===`bad`&&!ce(e))&&!(n===`fixup`&&!Sd(e))&&!(a&&!a.has(e.key))&&!(n===`replayed`&&!e.replayed)&&!(n&&![`bad`,`fixup`,`retried`,`replayed`].includes(n)&&e.stop!==n)&&(!t||e.kind===t)&&(!i||bd.some(t=>String(e[t]??``).toLowerCase().includes(i))))}function wd(e){let t=new Map;for(let n of e)t.set(n.stop||`?`,(t.get(n.stop||`?`)??0)+1);return[...t.entries()].sort((e,t)=>t[1]-e[1])}function Td(e){let t=new Map;return e.forEach((e,n)=>{let r=t.get(e.key)??{count:0,lastOk:-1,lastOkTry:0};f(e)&&r.count++,e.ok&&(r.lastOk=n,r.lastOkTry=(e.attempt??0)+1),t.set(e.key,r)}),t}var Ed=()=>E(`none`,{id:`none`});function Dd(e){let t=new Map;for(let n of e.all)t.set(`${n.kind}|${n.unit}`,(t.get(`${n.kind}|${n.unit}`)??0)+1);let n=Math.max(1,...e.rows.map(e=>e.wall_s)),r=new Map;for(let t of e.journal)Ee(r.get(t.key)??r.set(t.key,we()).get(t.key),t);let i=e=>e.tries.length>0,a=(e,t)=>{if(!i(e))return k`<span class="jdim">${Ed()}</span>`;let n=r.get(e.key);return n?.reported?t(n):k`<span class="jdim">—</span>`};return[{id:`task`,header:E(`Task`),tip:E(`Kind · unit`),width:`minmax(220px, 0.6fr)`,rowHeader:!0,text:e=>e.key,cell:e=>{let n=C(e),r=e.pass!==null&&(t.get(`${e.kind}|${e.unit}`)??0)>1?e.pass:null;return k`<span class="grow jmono" title=${e.key}>
|
|
603
|
+
${Ru(n,E(n?`Python task`:`Agent task`))}${e.kind}
|
|
604
|
+
${e.unit?k`<span class="jdim">· ${e.unit}</span>`:j}${r===null?j:k`<span class="pass">${Zo(r)}</span>`}
|
|
605
|
+
${e.claims?.length?k`<span class="jdim also" title=${i=e.claims,K(Us(),Mo(i))}>${(e=>e.length>2?E(T`Locks ${e.length} names`):E(T`Locks ${Mo(e)}`))(e.claims)}</span>`:j}
|
|
606
|
+
${e.priority?k`<span class="jdim also" title=${hc()}>${mc(e.priority)}</span>`:j}
|
|
607
|
+
</span>`;var i}},{id:`attempts`,header:E(`Attempts`),tip:E(`Attempts that ran`),align:`end`,width:`64px`,cell:e=>e.tries.length},{id:`time`,header:E(`Time`),tip:E(`Summed over all attempts`),align:`end`,width:`132px`,cell:e=>k`<span class="wall">${i(e)?k`${z(e.wall_s)}<span class="jdur"><i class=${C(e)?``:`llm`} style="width:${Math.max(4,Math.round(100*e.wall_s/n))}%"></i></span>`:k`<span class="jdim">${Ed()}</span><span class="jdur" style="visibility:hidden"></span>`}</span>`},{id:`tokens`,header:E(`Tokens`),tip:E(`Input and output, summed over all attempts`),align:`end`,width:`72px`,cell:e=>a(e,e=>k`<span title=${K(E(T`Cache read ${J(e.cache_read)}`),E(T`Cache write ${J(e.cache_creation)}`))}>${J(e.input+e.output)}</span>`)},{id:`cost`,header:E(`Cost`),tip:E(`Reported by the coding agent`),align:`end`,width:`72px`,cell:e=>a(e,e=>Y(e.cost))},{id:`ended`,header:E(`Last attempt ended`),align:`end`,width:`128px`,cell:e=>k`<span class="meta">${i(e)?G(e.tries[e.tries.length-1]?.ts,!0):Ed()}</span>`},{id:`status`,header:E(`Status`,{id:`status`}),width:`minmax(240px, 1fr)`,cell:t=>{let n=function(e,t){return e.outcome===`not_started`?Ko(e,t.outcomes,t.run):e.outcome===`partial`?w(e.attempts[e.attempts.length-1]?.reason??``,t.run):e.outcome===`waiting`&&e.deferred?ys(e.deferredCause,e.deferred,e.deferredIn):e.outcome===`waiting`?function(e){let t=e[0];return t?e.length===1?E(T`waits for output of ${q(t)}`):E(T`waits for output of ${e.length} earlier tasks`):``}(e.waits_for.map(e=>t.outcomes.get(e)??{kind:e})):``}(t,e),r=t.outcome===`waiting`&&t.deferred?function(e){let t=e?.cause===`rest`?vs(e.rests??[]):[];return t.length>1?t.map(_s).join(`
|
|
608
|
+
`):``}(t.deferredCause)||t.deferred:``;return k`${Zr({text:Io(t.outcome,e.live&&!t.deferred),tone:Ho(t.outcome),mark:Wo(t.outcome),title:t.last_stop})}${n?k`<span class="cause" title=${r||j}>${n}</span>`:j}`}}]}var Od=[Kr,zu,O` caption{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}tr{column-gap:20px;padding:6px 12px;}tbody tr{border-bottom:0;border-radius:8px;transition:background 0.15s;}thead tr{align-items:end;white-space:nowrap;padding:4px 12px 8px;margin-bottom:4px;}tbody [data-col='ended']{font-size:var(--font-size-sm);}.wall{display:flex;align-items:center;justify-content:flex-end;gap:8px;}.wall .jdur{width:56px;margin:0;flex:none;}.grow{display:flex;align-items:center;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.grow .jdim{margin-left:8px;}.pass{margin-left:8px;font-size:11px;color:var(--text-muted);}.cause{display:block;font-size:11px;color:var(--text-muted);margin-top:2px;white-space:normal;overflow-wrap:anywhere;}@container (max-width:760px){tr{grid-template-columns:minmax(0,1fr) 128px 90px;}[data-col='attempts'],[data-col='tokens'],[data-col='cost'],[data-col='ended']{display:none;}}`],kd=class extends M{constructor(...e){super(...e),this.journal=[],this.plan=null,this.kind=``,this.q=``,this.live=!1,this.run=``}static{this.styles=[V,O`:host{display:block;margin-top:4px;}`]}open(e,t){let n=e.find(e=>e.key===t);n&&Q(this,`ca-open-task`,C(n)?{key:t,view:`output`}:{key:t})}render(){let e=this.plan?S(this.journal,this.plan):null,t=e?.rows??[],n=yd(_d(t,this.kind,this.q));return n.length?k`<cae-data-table .columns=${Dd({run:this.run,live:this.live,outcomes:e?.outcomes??new Map,all:t,rows:n,journal:this.journal})} .rows=${n} .rowKey=${e=>e.key} .rowTone=${e=>e.outcome===`running`?`running`:void 0} .rowAttrs=${e=>({"data-executor":C(e)?`python`:`agent`})} .cellStyles=${Od} .caption=${E(`Tasks`,{id:`tab-tasks`})} .strings=${Hs(E(`No tasks`))} @cae-activate=${e=>this.open(n,e.detail.id)} ></cae-data-table>`:k`<div class="blank"><span class="ic" aria-hidden="true">≡</span>${t.length?E(`No tasks match the filter`):E(`No tasks`)}</div>`}};function Ad(e){return e===`invalid_input`?Fo(`not_started`):Z(e)}function jd(e){let t=Math.max(1,...e.rows.map(e=>e.wall_s||0)),n=Td(e.journal),r=new Map(e.journal.map((e,t)=>[e,t]));return[{id:`ended`,header:E(`Ended`),width:`64px`,cell:e=>k`<span class="jmono" title=${G(e.ts,!0)}>${G(e.ts)}</span>`},{id:`task`,header:E(`Task`),width:`minmax(130px,0.8fr)`,rowHeader:!0,text:e=>e.key,cell:e=>{let t=C(e);return k`<span class="jmono" title=${e.key}>${Ru(t,E(t?`Python task`:`Agent task`),``)}
|
|
609
|
+
${q(e)}</span>`}},{id:`outcome`,header:E(`Outcome`),tip:E(`How the attempt ended (stop)`),width:`minmax(150px,0.7fr)`,cell:t=>{let r=f(t),i=r&&(n.get(t.key)?.count??1)>1,a=r?Xo((t.rounds??1)-1):``,o=e.replayMarks&&t.replayed?Ns():``;return Qr({text:k`<span class="nw">${Ad(t.stop)}</span>${i||a||o?k`<span class="sub" title=${o?Ps():j}>${K(i?Jo(t.attempt):``,a,o)}</span>`:j}`,tone:Vo(t.stop),cls:`two`,title:t.stop})}},{id:`agent`,header:E(`Agent, model, identity`),width:`minmax(150px,1fr)`,cell:e=>k`<span class="jmono jdim two" title=${K(e.route,ws(e.hops,null,e.skipped_hops))||j}>${f(e)?k`<span>${[e.agent,e.model].filter(Boolean).join(` / `)||`—`}</span>${function(e){let t=[...new Set([...(e.hops??[]).map(e=>e.credential),e.credential].filter(Boolean))];if(!t.length)return j;let n=(e.quota??[])[0],r=n?E(T`Usage at session start (account-wide): ${us(n)}`):``,i=n&&t.length===1&&(n.credential??``)===t[0],a=n?i?cs(n):us(n):``;return k`<span class="sub" title=${[r,...t.map(rs)].filter(Boolean).join(`
|
|
610
|
+
`)||j}>${t.map(e=>ns(e)).join(` → `)}${n?k` <span class="q">${a}</span>`:j}</span>`}(e)}`:`—`}</span>`},{id:`tokens`,header:E(`Tokens`),tip:E(`Input / output | cache read / cache write`),align:`end`,width:`92px`,cell:e=>{let t=e.usage;return k`<span class="two" title=${[t?.resident==null?``:E(T`Input of the first API call: ${J(t.resident)}`),vc(e)].filter(Boolean).join(`
|
|
611
|
+
`)||j}>${t?k`<span>${J(t.input)} / ${J(t.output)}</span><span class="sub">${J(t.cache_read)} / ${J(t.cache_creation)}</span>`:k`<span class="jdim">—</span>`}</span>`}},{id:`cost`,header:E(`Cost`),tip:E(`Reported by the coding agent`),align:`end`,width:`60px`,cell:e=>{let t=e.hops??[];return k`<span class="cost" title=${(t.length>1?t.map(e=>K(e.model||e.route||`—`,ns(e.credential)||`—`,Y(e.cost_usd),Z(e.stop))).join(`
|
|
612
|
+
`):``)||E(`Reported by the coding agent`)}>${Y(e.cost_usd)}</span>`}},{id:`time`,header:E(`Time`),align:`end`,width:`76px`,cell:e=>{let n=C(e);return f(e)?k`${z(e.wall_s)}<span class="jdur"><i class=${ce(e)?`bad`:n?``:`llm`} style="width:${Math.max(2,Math.round(100*(e.wall_s||0)/t))}%"></i></span>`:`—`}},{id:`reason`,header:E(`Reason`),width:`minmax(200px,2.2fr)`,cell:t=>{let i=Po([t]);return k`<span class="jwhy" title=${t.reason||j}>${(t=>{let i=f(t),a=ws(t.hops,null,t.skipped_hops),o=e.run||t.run_id||``,s=e.outcomes.get(t.key),c=t.stop===`invalid_input`&&s?Ko({attempts:[t],cause:null},e.outcomes,o):``,l=c?ko(c):t.ok&&i&&t.stop!==`partial`||!t.reason?``:w(t.reason,o),u=(e=>{let t=n.get(e.key);return!e.ok&&f(e)&&(t?.lastOk??-1)>(r.get(e)??0)?t?.lastOkTry??0:0})(t),d=u?E(T`Task done on attempt ${u}`):``,p=t.context_warned?yc(t):``;return a||l||d||p?k`${a?k`<span class="nw" title=${E(`Model switch`)}>${a}</span><br />`:j}${l?k`${l}<br />`:j}${d?k`<span class="later">${d}</span>${p?k`<br />`:j}`:j}${p?k`<span class="tone-text" data-tone="attention" title=${[bc(),vc(t)].filter(Boolean).join(`
|
|
613
|
+
`)}>${p}</span>`:j}`:k`<span class="jdim">—</span>`})(t)}${i?k` <span class="unread nw" title=${E(T`Event types this contraagent version does not know (unread_events): ${i}`)} ><span aria-hidden="true">⚠</span> ${E(`Unrecognized events`)}</span >`:j}</span>`}},...(e.extras??[]).map(e=>({id:`x:${e}`,header:e,tip:Gs(),width:`minmax(80px,0.6fr)`,text:t=>Ks(t[e]),cell:t=>{let n=Ks(t[e]);return n===`—`?k`<span class="jdim">—</span>`:k`<span class="jmono" title=${n}>${n}</span>`}}))]}U([P({attribute:!1})],kd.prototype,`journal`,void 0),U([P({attribute:!1})],kd.prototype,`plan`,void 0),U([P()],kd.prototype,`kind`,void 0),U([P()],kd.prototype,`q`,void 0),U([P({type:Boolean})],kd.prototype,`live`,void 0),U([P()],kd.prototype,`run`,void 0),kd=U([N(`ca-task-table`),D()],kd);var Md=[Kr,zu,O` caption{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}tr{column-gap:12px;row-gap:2px;padding:7px 12px;border-bottom:1px solid var(--line);font-size:12px;min-width:980px;}th,td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}tbody [data-col='outcome'],tbody [data-col='agent'],tbody [data-col='tokens'],tbody [data-col='reason']{white-space:normal;}tbody [data-col='ended'],tbody [data-col='task']{font-family:var(--mono);font-size:11.5px;}thead{position:sticky;top:0;z-index:1;}thead tr{color:var(--text-muted);font-size:11px;background:var(--bg);}tbody tr[data-key]:hover{background:var(--card);}tbody tr[data-executor='python']{opacity:0.85;}tbody tr[data-executor='python']:hover,tbody tr[data-executor='python'][data-tone='failed']{opacity:1;}tbody tr[data-ran='false']{opacity:0.8;}tbody tr[data-fresh]{animation:rowin 1.6s var(--ease);}tr.empty{min-width:0;}tr.empty td{font-size:var(--font-size-sm);}.jwhy{color:var(--text-2);overflow-wrap:anywhere;}.later{color:var(--status-done);}.nw{white-space:nowrap;}.unread{color:var(--status-attention);}.two{display:flex;flex-direction:column;line-height:1.35;}.jstop.two{display:grid;grid-template-columns:auto minmax(0,1fr);align-content:center;}.jstop.two>*{grid-column:2;}.jstop.two::before{grid-row:1;}.two .sub{color:var(--text-muted);font-size:11px;white-space:normal;overflow-wrap:anywhere;}[data-col='tokens'] .two>span{white-space:nowrap;}.sub .q{color:var(--text-2);font-family:var(--mono);white-space:nowrap;}.jstop .sub{font-weight:400;}.cost{font-variant-numeric:tabular-nums;color:var(--text-2);}`],Nd=class extends M{constructor(...e){super(...e),this.rows=[],this.plan=null,this.fresh=new Set,this.kind=``,this.stop=``,this.q=``,this.run=``,this.extras=[],this.replayMarks=!1}static{this.styles=[V,O` :host{display:block;}.jtally{display:flex;flex-wrap:wrap;gap:8px;padding:2px 0 12px;}.jchip{border:1px solid var(--line);border-radius:999px;padding:3px 11px;font-size:11.5px;color:var(--text-muted);cursor:pointer;transition:all 0.15s;background:none;}.jchip b{color:var(--text);}.jchip:hover{border-color:var(--line2);color:var(--text);}.jchip.on{background:var(--accent-bg);border-color:var(--accent);color:var(--text);}.jchip[data-tone='failed'],.jchip[data-tone='attention']{color:var(--tone);border-color:color-mix(in srgb,var(--tone) 40%,transparent);}`]}open(e,t){let n=e.find(e=>ue(e)===t);n&&Q(this,`ca-open-task`,C(n)?{key:n.key,view:`output`}:{key:n.key})}render(){let e=Cd(this.rows,this.kind,this.stop,this.q).reverse(),t=this.rows.filter(Sd).length,n=xd(this.rows).size,r=this.replayMarks?this.rows.filter(e=>e.replayed).length:0,i=(e,t,n,r,i=`neutral`)=>k`<button type="button" class="jchip ${this.stop===e?`on`:``}" data-tone=${I(i)} data-mark=${Yr(i)??j} aria-pressed=${this.stop===e} title=${r} @click=${()=>Q(this,`ca-filter`,{stop:this.stop===e?``:e})}>${t} <b>${n}</b></button>`,a=jd({run:this.run,outcomes:S(this.rows,this.plan).outcomes,journal:this.rows,rows:e,extras:this.extras,replayMarks:this.replayMarks});return k`<div class="jtally">
|
|
614
|
+
${wd(this.rows).map(([e,t])=>i(e,Ad(e),t,e,Vo(e)))}
|
|
615
|
+
${t?i(`fixup`,E(`attempts with corrections`),t,Ds()):j}
|
|
616
|
+
${n?i(`retried`,E(`tasks retried`),n,qo()):j}
|
|
617
|
+
${r?i(`replayed`,E(`attempts replayed`),r,Ps()):j}
|
|
618
|
+
</div>
|
|
619
|
+
<cae-data-table .columns=${a} .rows=${e} .rowKey=${ue} .rowTone=${e=>f(e)&&ce(e)?`failed`:void 0} .rowAttrs=${e=>({"data-executor":C(e)?`python`:`agent`,...f(e)?{}:{"data-ran":`false`},...this.fresh.has(ue(e))?{"data-fresh":``}:{}})} .cellStyles=${Md} .caption=${E(`History`)} .strings=${Hs(E(`No finished attempts`))} @cae-activate=${t=>this.open(e,t.detail.id)} ></cae-data-table>`}};U([P({attribute:!1})],Nd.prototype,`rows`,void 0),U([P({attribute:!1})],Nd.prototype,`plan`,void 0),U([P({attribute:!1})],Nd.prototype,`fresh`,void 0),U([P()],Nd.prototype,`kind`,void 0),U([P()],Nd.prototype,`stop`,void 0),U([P()],Nd.prototype,`q`,void 0),U([P()],Nd.prototype,`run`,void 0),U([P({attribute:!1})],Nd.prototype,`extras`,void 0),U([P({type:Boolean,attribute:`replay-marks`})],Nd.prototype,`replayMarks`,void 0),Nd=U([N(`ca-journal-table`),D()],Nd);var Pd=[`invalid`,`refused`,`failed`,`running`,`pending`,`valid`];function Fd(e){let t=e?.tally,n=t?Pd.filter(e=>t[e]):[];return n.length?n.map(e=>Uc(e,t?.[e])):k`<span class="meta">${E(`No checked files`)}</span>`}var Id=e=>e.split(`/`).slice(-2).join(`/`),Ld=e=>q({kind:e.kind||e.key,unit:e.unit&&e.unit!==e.key?e.unit:``}),Rd=e=>e?Pd.indexOf(e):Pd.length,zd=class extends M{constructor(...e){super(...e),this.outputs=null,this.run=``,this.journal=[],this.plan=null,this.outcomes=new Map,this.open=new Zn(`contracts:open`,this),this.producerOf=e=>{for(let t of this.outputs?.contracts??[]){let n=(t.outputs??[]).find(t=>t.path===e);if(n)return{name:Ld(t),written:!!n.file.exists,outcome:this.outcomes.get(t.key)?.outcome}}}}static{this.styles=[V,Yc,zu,O` :host{display:block;container-type:inline-size;}.ct-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px;}details.ct{border-top:1px solid var(--line);}details.ct>summary{list-style:none;cursor:pointer;padding:7px 4px;display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;}details.ct>summary>*{min-width:0;overflow-wrap:anywhere;}details.ct>summary::-webkit-details-marker{display:none;}details.ct>summary::before{content:'▸';color:var(--text-muted);width:10px;transition:transform 0.15s;}details.ct[open]>summary::before{transform:rotate(90deg);}details.ct>summary:hover{background:var(--raise);border-radius:8px;}.k-ic{margin-right:0;}.ct-f{margin-left:auto;white-space:nowrap;}.ct-body{padding:4px 10px 14px 24px;}@container (max-width:480px){.ct-body{padding:4px 0 14px 12px;}}.ct-links{margin-top:10px;font-size:12px;}.lead{margin:-4px 0 10px;}.one{display:flex;align-items:center;gap:10px;padding:7px 4px 7px 24px;border-top:1px solid var(--line);flex-wrap:wrap;}.why{color:var(--text-2);font-size:12px;}`]}render(){let e=this.outputs?.contracts??[];if(this.outcomes=this.plan?S(this.journal,this.plan).outcomes:new Map,!e.length)return k`<div class="blank"><span class="ic" aria-hidden="true">▣</span><b>${E(`No checked files`)}</b>
|
|
620
|
+
<span>${E(`No task declares an OutputContract or an InputContract`)}</span></div>`;let t=e.flatMap(e=>(e.outputs??[]).map(t=>[e,t])).sort(([e,t],[n,r])=>Rd(t.status)-Rd(r.status)||e.key.localeCompare(n.key)),n=e.flatMap(e=>(e.inputs??[]).map(t=>[e,t]));return k`<div class="g12">
|
|
621
|
+
<section class="panel c12">
|
|
622
|
+
<h3 title=${E(`OutputContract`)}>${E(`Outputs`)}
|
|
623
|
+
<span class="r">${E(`Files each task must write`)}</span></h3>
|
|
624
|
+
<div class="ct-row">${Fd(this.outputs)}</div>
|
|
625
|
+
${H(t,([e,t])=>`out|${e.key}|${t.path}`,([e,t])=>this.outRow(e,t))}
|
|
626
|
+
</section>
|
|
627
|
+
${n.length?k`<section class="panel c12">
|
|
628
|
+
<h3 title=${E(`InputContract`)}>${E(`Inputs`)}
|
|
629
|
+
<span class="r">${E(`Files each task reads`)}</span></h3>
|
|
630
|
+
${H(n,([e,t])=>`in|${e.key}|${t.path}`,([e,t])=>this.inRow(e,t))}
|
|
631
|
+
</section>`:j}
|
|
632
|
+
</div>`}details(e,t,n){return k`<details class="ct" ?open=${this.open.has(e)} @toggle=${t=>this.open.set(e,t.target.open)}>
|
|
633
|
+
<summary class="ct-sum">${t}</summary>
|
|
634
|
+
<div class="ct-body">${n}</div>
|
|
635
|
+
</details>`}link(e,t,n){return k`<a class="lnk" href="#" @click=${n=>{n.preventDefault(),Q(this,`ca-open-task`,{key:e,view:t})}}>${n}</a>`}who(e){let t=C(e);return k`${Ru(t,E(t?`Python task`:`Agent task`))}
|
|
636
|
+
<b class="jmono" title=${e.key}>${Ld(e)}</b>`}reasonOf(e){for(let t=this.journal.length-1;t>=0;t--){let n=this.journal[t];if(n?.key===e)return w(n.reason,this.run)}return``}outRow(e,t){if(t.status===`refused`)return k`<div class="one">
|
|
637
|
+
${Uc(`refused`)}${this.who(e)}
|
|
638
|
+
<span class="why">${ks(t,this.run,this.producerOf)}</span>
|
|
639
|
+
</div>`;let n=t.file,r=t.status,i=t.rounds??0,a=t.errors??[],o=Ld(e);return this.details(`out|${e.key}|${t.path}`,k`${Uc(r)}
|
|
640
|
+
${i>1?k`<span class="meta" title=${Ds()}>${Os(i,r===`valid`)}</span>`:j}
|
|
641
|
+
${this.who(e)}
|
|
642
|
+
<span class="jmono jdim ct-path" title=${t.path}>${Id(t.path)}</span>
|
|
643
|
+
${r===`failed`&&this.reasonOf(e.key)?k`<span class="why">${this.reasonOf(e.key)}</span>`:j}
|
|
644
|
+
<span class="meta ct-f">${n.exists?`${n.size??0} B`:r?j:E(`No file`)}</span>`,k`${qc(t,`output`)}
|
|
645
|
+
${Wc(t)}
|
|
646
|
+
${a.length?k`<h4>${E(`Errors`)}</h4><pre class="ct-err">${a.map(e=>w(e,this.run)).join(`
|
|
647
|
+
`)}</pre>`:j}
|
|
648
|
+
<div class="ct-links">
|
|
649
|
+
${this.link(e.key,`output`,E(T`${o}: input and output`))}
|
|
650
|
+
${C(e)?j:k`<br />${this.link(e.key,`transcript`,E(T`${o}: transcript`))}`}
|
|
651
|
+
</div>`)}inRow(e,t){let n=t.file,r=!!n.exists;return this.details(`in|${e.key}|${t.path}`,k`${Hc(t)}
|
|
652
|
+
${this.who(e)}
|
|
653
|
+
<span class="jmono jdim ct-path" title=${t.path}>${Id(t.path)}</span>
|
|
654
|
+
<span class="meta ct-f">${r?`${n.size??0} B`:E(`No file`)}</span>`,k`${qc(t,`input`)}
|
|
655
|
+
${Wc(t)}
|
|
656
|
+
<div class="ct-links">${this.link(e.key,`input`,E(T`${Ld(e)}: input`))}</div>`)}};U([P({attribute:!1})],zd.prototype,`outputs`,void 0),U([P()],zd.prototype,`run`,void 0),U([P({attribute:!1})],zd.prototype,`journal`,void 0),U([P({attribute:!1})],zd.prototype,`plan`,void 0),zd=U([N(`ca-contracts`),D()],zd);var Bd=e=>e.replace(/\$\{?([A-Za-z_]\w*)\}?/g,`<span class="pv">$&</span>`).replace(/\{\{contract\}\}/g,`<span class="pv pc">{{contract}}</span>`);function Vd(e){let t=e.match(/^(TELEMETRY [^\n]*)\n+([\s\S]*)$/);return t?{head:t[1]??``,body:t[2]??``}:{head:``,body:e}}var Hd=new Set([`instructions`,`schema`,`agent`]),Ud=class extends M{constructor(...e){super(...e),this.definition=null,this.memory=`definition`,this.open=new Zn(`definition:open`,this),this.source=new Zn(`definition:source`,this)}static{this.styles=[V,Gr,qr,Jc,O` :host{display:block;}.ct-in{display:flex;align-items:center;gap:10px;padding:5px 4px;border-top:1px solid var(--line);}.df{border-top:1px solid var(--line);}.df-hd{padding:6px 2px;display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;}.df-sum{flex:1 1 16em;min-width:0;display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;padding:0;background:none;border:0;color:inherit;text-align:start;cursor:pointer;}.df-sum .jmono{min-width:0;overflow-wrap:anywhere;}.df-tog{flex:none;margin-inline-start:auto;}.df-sum::before{content:'▸';color:var(--text-muted);width:10px;flex:none;transition:transform 0.15s;}.df-sum[aria-expanded='true']::before{transform:rotate(90deg);}.py-sig{font-family:var(--mono);font-size:14px;padding:10px 14px;background:var(--well);border:1px solid var(--line);border-radius:8px;overflow-x:auto;white-space:pre;}.py-where{margin:6px 2px 12px;font-family:var(--mono);font-size:11.5px;color:var(--text-muted);overflow-wrap:anywhere;}.py-doc{margin:0 0 12px;padding:8px 12px;border-left:3px solid var(--line2);color:var(--text-2);white-space:pre-wrap;line-height:1.6;}.src{display:grid;grid-template-columns:auto minmax(0,1fr);background:var(--well);border:1px solid var(--line);border-radius:8px;font-family:var(--mono);font-size:12px;line-height:1.55;max-height:520px;overflow:auto;}.src pre{margin:0;padding:10px 12px;white-space:pre;}.src .ln{color:var(--text-muted);text-align:right;user-select:none;border-right:1px solid var(--line);opacity:0.7;}`]}willUpdate(e){e.has(`memory`)&&(this.open=new Zn(`${this.memory}:open`,this),this.source=new Zn(`${this.memory}:source`,this))}render(){let e=this.definition;if(!e)return k`<div class="blank"><span class="ic" aria-hidden="true">⌘</span><b>${E(`No definition`)}</b></div>`;if(e.executor===`python`)return this.python(e);let t=e.plugin_dirs||[],n=e.output_from===`message`?K(e.output||``,E(`from the final message`)):e.output||``,r=e.preserve??[],i=[...e.base_kind?[[E(`Implementation of`),k`<span class="jmono" title=${E(`A kind that other kinds implement (base_kind)`)}>${e.base_kind}</span>`]]:[],[E(`Role`),e.role||E(`none`,{id:`none`})],[t.length>1?E(`Plugin directories`):E(`Plugin directory`),t.length?k`${t.map((e,t)=>k`${t?`, `:``}<span class="jmono" title=${e}>${(e=>{let t=e.split(`/`).filter(Boolean);return t.length>2?`…/${t.slice(-2).join(`/`)}`:e})(e)}</span>`)}`:E(`none`,{id:`none`})],[E(`Parameters`),e.params||E(`none`,{id:`none`})],[E(`Output`,{id:`definition-output`}),e.output_of?k`<span title=${E(`The kind whose output file this task writes (output_of)`)}>${K(n,(a=e.output_of,E(T`output of ${a}`)))}</span>`:n||E(`none`,{id:`none`})],...r.length?[[Tc(),k`<span class="jmono" title=${Ec()}>${r.join(`, `)}</span>`]]:[],...(e.validators||[]).length?[[E(`Other checks`),(e.validators||[]).join(`, `)]]:[],...Array.isArray(e.tools)&&e.tools.length===0?[[E(`Tools`),E(`none`,{id:`none`})]]:[]];var a;let o=Array.isArray(e.declared)?e.declared:[],s=t=>t.part===`agent`&&!!e.role&&t.path.replace(/^.*\//,``)===`${e.role}.md`,c=[...e.files||[]].sort((e,t)=>Number(s(t))-Number(s(e)));return k`<div class="drv-facts" style="margin-bottom:10px">${i.map(([e,t])=>k`<span><i>${e}</i>${t}</span>`)}</div>
|
|
657
|
+
${o.length?k`<h4 class="sect-h">${E(`Checked files`)}</h4>
|
|
658
|
+
${o.map(e=>k`<div class="ct-in">
|
|
659
|
+
<span class="ct-chip">${e.io}</span><span class="jmono">${e.path}</span>
|
|
660
|
+
<span class="meta" title=${E(`The schema the file is checked against`)}>${E(T`Schema ${e.schema}`)}</span>
|
|
661
|
+
</div>`)}`:j}
|
|
662
|
+
${c.length?k`<h4 class="sect-h">${E(`Files`)}</h4>${c.map(t=>this.file(t,s(t),!!e.role))}`:k`<div class="meta">${E(k`No files | defined in Python code (<code>TaskAdapter</code>)`)}</div>`}`}python(e){let t=(e.files||[]).find(e=>e.part===`source`),n=e.line??1,r=t?t.text.replace(/\n$/,``).split(`
|
|
663
|
+
`).length:0,i=e.retry_on??[],a=[[E(`Parameters`),e.params&&e.params!==`none`?e.params:E(`none`,{id:`none`})],[E(`Output`,{id:`definition-output`}),e.output&&e.output!==`none`?e.output:E(`none`,{id:`none`})],...(e.validators||[]).length?[[E(`Other checks`),(e.validators||[]).join(`, `)]]:[],...e.retries?[[E(`Retries`),k`<span title=${qo()}>${o=e.retries,E(T`up to ${o}`)}</span>`]]:[],...e.retries&&i.length?[[E(`Retried exceptions`),k`<span class="jmono" title=${E(`Exceptions that give another attempt (retry_on)`)}>${i.join(`, `)}</span>`]]:[]];var o;return k`${e.signature?k`<div class="py-sig hl">${zi(Ni(`def ${e.signature}`,`python`))}</div>`:j}
|
|
664
|
+
<div class="py-where">
|
|
665
|
+
${e.function??e.kind}${e.file?k` | <span title=${e.file}>${e.file.replace(/^.*\//,``)}${e.line?`:${e.line}`:``}</span>`:j}
|
|
666
|
+
</div>
|
|
667
|
+
${e.doc?k`<div class="py-doc">${e.doc}</div>`:j}
|
|
668
|
+
<div class="drv-facts" style="margin-bottom:12px">${a.map(([e,t])=>k`<span><i>${e}</i>${t}</span>`)}</div>
|
|
669
|
+
${t?k`<h4 class="sect-h">${E(`Source`)}</h4>
|
|
670
|
+
<div class="src">
|
|
671
|
+
<pre class="ln">${Array.from({length:r},(e,t)=>n+t).join(`
|
|
672
|
+
`)}</pre>
|
|
673
|
+
<pre class="hl">${zi(Ni(t.text.replace(/\n$/,``),`python`))}</pre>
|
|
674
|
+
</div>`:j}`}file(e,t=!1,n=!1){let r=`${e.part}|${e.path}`,i=/\.md$/i.test(e.path),a=e.part===`instructions`,o=!i||this.source.has(r),s=e.part===`agent`&&n?t:Hd.has(e.part),c=this.open.has(r)||s&&!this.open.has(`closed:${r}`);return k`<div class="df">
|
|
675
|
+
<div class="df-hd">
|
|
676
|
+
<button type="button" class="df-sum" aria-expanded=${c?`true`:`false`} @click=${()=>{this.open.set(r,!c),this.open.set(`closed:${r}`,c),this.requestUpdate()}}>
|
|
677
|
+
<span class="tag">${e.part}</span><span class="jmono">${e.path}</span>
|
|
678
|
+
${t?k`<span class="ct-chip">${E(`Role of this kind`)}</span>`:j}
|
|
679
|
+
</button>
|
|
680
|
+
${i?k`<button type="button" class="df-tog" @click=${()=>{this.source.set(r,!this.source.has(r)),this.requestUpdate()}}>${E(o?`Show rendered`:`Show source`)}</button>`:j}
|
|
681
|
+
</div>
|
|
682
|
+
${c?o?k`<pre class="df-text"><code class="hl">${zi(a?(l=e.text,Bd(B(l))):Ni(e.text,e.path))}</code></pre>`:zi(Li(e.text,a?Bd:void 0)):j}
|
|
683
|
+
</div>`;var l}};U([P({attribute:!1})],Ud.prototype,`definition`,void 0),U([P()],Ud.prototype,`memory`,void 0),Ud=U([N(`ca-definition`),D()],Ud);var Wd=class extends M{constructor(...e){super(...e),this.run=``,this.live=!1,this.journal=[],this.plan=null,this.selected=null,this.defs=[],this.defsRun=``,this.timer=null}static{this.styles=[V,O` :host{display:block;container-type:inline-size;}.defs{display:grid;grid-template-columns:260px minmax(0,1fr);gap:14px;align-items:start;}.deflist{display:flex;flex-direction:column;gap:6px;}.defitem{padding:9px 12px;border-radius:10px;background:var(--panel);border:1px solid var(--line);cursor:pointer;color:inherit;text-align:start;display:flex;flex-direction:column;gap:2px;}.defitem:hover{border-color:var(--line2);}.defitem.sel{border-color:var(--accent);background:var(--accent-bg);}@container (max-width:720px){.defs{grid-template-columns:minmax(0,1fr);}}`]}disconnectedCallback(){super.disconnectedCallback(),this.clearTimer(),this.defsRun=``}connectedCallback(){super.connectedCallback(),this.run&&this.defsRun!==this.run&&this.load()}willUpdate(e){(e.has(`run`)||e.has(`client`))&&this.run&&this.client&&this.defsRun!==this.run&&(this.defs=[],this.load())}updated(){let e=new Set(this.tasks().filter(e=>!C(e)&&(e.tries.length||e.outcome===`running`)).map(e=>e.kind)).size;this.live&&this.defsRun===this.run&&this.defs.length<e&&!this.timer&&(this.timer=setTimeout(()=>{this.timer=null,this.load()},3e3))}tasks(){return[...S(this.journal,this.plan).outcomes.values()]}clearTimer(){this.timer&&clearTimeout(this.timer),this.timer=null}async load(){if(!this.client||!this.run)return;let e=this.run;this.defsRun=e;let t=[];try{t=await this.client.definitions(e)}catch{t=[]}e===this.run&&(this.defs=t)}render(){let e=this.defs,t=this.tasks(),n=[...new Set(t.filter(e=>C(e)).map(e=>e.kind))].filter(t=>!e.some(e=>e.kind===t));if(!e.length&&!n.length)return k`<div class="blank"><span class="ic" aria-hidden="true">⌘</span><b>${this.live?E(`No definitions yet`):E(`No definitions`)}</b></div>`;let r=this.selected!==null&&n.includes(this.selected)?this.selected:null,i=r?void 0:e.find(e=>e.kind===this.selected)??e.find(e=>e.plugin)??e[0],a=r??i?.kind??n[0]??``,o=e=>{let n=t.filter(t=>t.kind===e),r=n.length,i=n.reduce((e,t)=>e+t.tries.length,0);return Ao(E(r===1?`1 task`:T`${r} tasks`),E(i===1?`1 attempt`:T`${i} attempts`))};return k`<div class="defs">
|
|
684
|
+
<div class="deflist">
|
|
685
|
+
${H(e,e=>e.kind,e=>{return k`<button type="button" class="defitem ${e.kind===a?`sel`:``}" aria-current=${e.kind===a?`true`:j} @click=${()=>Q(this,`ca-navigate`,{def:e.kind})}>
|
|
686
|
+
<b class="jmono">${e.kind}</b>
|
|
687
|
+
<span class="meta words">${di([...e.base_kind?[(t=e.base_kind,E(T`Implementation of ${t}`))]:[],e.executor===`python`?`Python`:e.role?E(T`Role ${e.role}`):E(`No role`),...o(e.kind)])}</span>
|
|
688
|
+
</button>`;var t})}
|
|
689
|
+
${H(n,e=>e,e=>k`<button type="button" class="defitem ${e===a?`sel`:``}" aria-current=${e===a?`true`:j} @click=${()=>Q(this,`ca-navigate`,{def:e})}>
|
|
690
|
+
<b class="jmono">${e}</b>
|
|
691
|
+
<span class="meta words">${di([`Python`,...o(e)])}</span>
|
|
692
|
+
</button>`)}
|
|
693
|
+
</div>
|
|
694
|
+
<section class="panel">
|
|
695
|
+
${i?k`<h3 title=${E(`As recorded when its first task started (definitions/<kind>.json)`)}>
|
|
696
|
+
${i.kind}<span class="r">${i.executor===`python`?E(`Python task`):i.plugin?E(T`Plugin ${i.name||``}`):E(`Defined in Python code`)}</span>
|
|
697
|
+
</h3>
|
|
698
|
+
<ca-definition .definition=${i} memory="definition:${i.kind}"></ca-definition>`:k`<h3>${a}<span class="r">${E(`Python task`)}</span></h3>
|
|
699
|
+
<ca-definition .definition=${null}></ca-definition>`}
|
|
700
|
+
</section>
|
|
701
|
+
</div>`}};U([P({attribute:!1})],Wd.prototype,`client`,void 0),U([P()],Wd.prototype,`run`,void 0),U([P({type:Boolean})],Wd.prototype,`live`,void 0),U([P({attribute:!1})],Wd.prototype,`journal`,void 0),U([P({attribute:!1})],Wd.prototype,`plan`,void 0),U([P({attribute:!1})],Wd.prototype,`selected`,void 0),U([F()],Wd.prototype,`defs`,void 0),Wd=U([N(`ca-definitions`),D()],Wd);var Gd=class extends M{constructor(...e){super(...e),this.procs=null,this.unresponsive=!1,this.exported=!1}static{this.styles=[V,O` :host{display:block;}.cmd{word-break:break-all;}`]}open(e){Q(this,`ca-open-task`,{key:e})}render(){let e=this.procs;if(!e?.alive){let e=this.exported?ic():this.unresponsive?Is():E(`not running`);return k`<div class="blank"><span class="ic" aria-hidden="true">⚙</span><b>${K(E(`No processes`),e)}</b></div>`}let t=e.python_tasks;return k`<div class="g12">
|
|
702
|
+
<section class="panel c12">
|
|
703
|
+
<h3 title=${E(`One per task (Backend.run)`)}>${E(`Agent sessions running`)} <span class="r">${e.launches.length}</span></h3>
|
|
704
|
+
${e.launches.length?H(e.launches,e=>e.key,e=>k`<div class="fl" @click=${t=>!t.target.closest(`button`)&&this.open(e.key)}>
|
|
705
|
+
<button type="button" class="fl-name jmono" @click=${()=>this.open(e.key)}>${q(e)}</button>
|
|
706
|
+
<span class="meta">${K(E(T`PID ${e.pid}`),E(T`Model ${e.model||`—`}`),e.role?E(T`Role ${e.role}`):``)} |
|
|
707
|
+
<cae-elapsed .since=${Ir.at(`c:${e.key}`,e.age_s)}></cae-elapsed></span>
|
|
708
|
+
<div class="meta mono cmd">${(e.full_cmd||E(`In the pipeline process`)).slice(0,400)}</div>
|
|
709
|
+
</div>`):k`<div class="meta">${E(`No agent sessions`)}</div>`}
|
|
710
|
+
</section>
|
|
711
|
+
${t.length?k`<section class="panel c12">
|
|
712
|
+
<h3 title=${E(`Functions in the pipeline process`)}>${E(`Python tasks running`)} <span class="r">${t.length}</span></h3>
|
|
713
|
+
${H(t,e=>e.key,e=>k`<div class="fl">
|
|
714
|
+
<b class="jmono">${q(e)}</b>
|
|
715
|
+
<span class="meta">${E(T`PID ${e.pid}`)} | <cae-elapsed .since=${Ir.at(`p:${e.key}`,e.age_s)}></cae-elapsed></span>
|
|
716
|
+
</div>`)}
|
|
717
|
+
</section>`:j}
|
|
718
|
+
<section class="panel c12"><h3>${E(`Process tree`)}</h3><ca-proc-tree .procs=${e}></ca-proc-tree></section>
|
|
719
|
+
</div>`}};U([P({attribute:!1})],Gd.prototype,`procs`,void 0),U([P({type:Boolean})],Gd.prototype,`unresponsive`,void 0),U([P({type:Boolean})],Gd.prototype,`exported`,void 0),Gd=U([N(`ca-procs-view`),D()],Gd),R(`cae-column-chart`,ua),R(`cae-line-chart`,da),R(`cae-heatmap`,ha),R(`cae-state-grid`,Ca),R(`cae-bar-chart`,wa);var Kd=[`failed`,`attention`,`done`,`running`,`muted`,`neutral`],qd=e=>typeof e._tone==`string`&&Kd.includes(e._tone)?e._tone:void 0,Jd=new Set([`usd`,`pct`,`duration`,`tokens`,`number`]),Yd=e=>typeof e==`string`?e:JSON.stringify(e),Xd=[Kr,O` caption{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}tr{column-gap:12px;padding:6px 12px;border-bottom:1px solid var(--line);font-size:12px;min-width:560px;}th,td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}thead tr{color:var(--text-muted);font-size:11px;}tbody [data-align='end']{font-variant-numeric:tabular-nums;}tbody tr[data-tone='failed'],tbody tr[data-tone='attention']{box-shadow:inset 2px 0 0 var(--tone);}td a,th a{color:var(--accent);text-decoration:none;}td a:hover,th a:hover,td a:focus-visible,th a:focus-visible{text-decoration:underline;}`],Zd=class extends M{constructor(...e){super(...e),this.sorts=new Map}static{this.styles=[V,Gr,O` :host{display:block;}.note{font-size:var(--font-size-sm);color:var(--text-2);line-height:1.55;max-width:78ch;}.note>:first-child{margin-top:0;}.note>:last-child{margin-bottom:0;}.note[data-tone]{padding-left:10px;border-left:3px solid var(--line2);}.note[data-tone='failed']{border-left-color:var(--status-failed);}.note[data-tone='attention']{border-left-color:var(--status-attention);}.note[data-tone='done']{border-left-color:var(--status-done);}.note[data-tone='running']{border-left-color:var(--status-running);}.block + .block{margin-top:18px;}h4{margin:0 0 8px;font-size:var(--font-size-sm);font-weight:600;color:var(--text-2);}details>summary{cursor:pointer;margin-bottom:8px;font-size:var(--font-size-sm);font-weight:600;color:var(--text-2);}details:not([open])>summary{margin-bottom:0;}`]}render(){let e=he(this.body);return e?this.draw(e,`0`):k`<cae-json-tree .value=${this.body??{}}></cae-json-tree>`}draw(e,t){let n=this.content(e,t);return e.title?e.collapsed?k`<details class="block"><summary>${e.title}</summary>${n}</details>`:k`<div class="block"><h4>${e.title}</h4>${n}</div>`:k`<div class="block">${n}</div>`}content(e,t){let n={empty:E(`No values`),showTable:E(`Show table`),showChart:E(`Show chart`),label:E(`Label`),other:E(`Other`),total:E(`Total`),none:`—`,scale:(e,t)=>E(T`${e} to ${t}`)};switch(e.type){case`blocks`:return k`${e.blocks.map((e,n)=>{let r=he(e);return r?this.draw(r,`${t}.${n}`):k`<div class="block"><cae-json-tree .value=${e}></cae-json-tree></div>`})}`;case`tiles`:return k`<cae-stat-tiles .tiles=${r=e.tiles,r.map(e=>({id:e.id,label:e.label,value:e.value,tone:e.tone??void 0,tip:e.tip??void 0,sub:e.sub??[]}))} .bump=${!1}></cae-stat-tiles>`;case`table`:return this.table(e,t);case`columns`:return k`<cae-column-chart .label=${e.title??``} .x=${e.x} .series=${e.series} ?stacked=${!!e.stacked} .format=${$s(e.unit)} .strings=${n}></cae-column-chart>`;case`lines`:return k`<cae-line-chart .label=${e.title??``} .x=${e.x} .series=${e.series} .format=${$s(e.unit)} .strings=${n}></cae-line-chart>`;case`heatmap`:return k`<cae-heatmap .label=${e.title??``} .x=${e.x} .y=${e.y} .values=${e.values} .format=${$s(e.unit)} .strings=${n}></cae-heatmap>`;case`hbars`:return k`<cae-bar-chart .label=${e.title??``} .bars=${e.bars.map(e=>({label:e.label,value:e.value,tone:e.tone??void 0}))} .format=${$s(e.unit)} .strings=${n}></cae-bar-chart>`;case`status_grid`:return k`<cae-state-grid .label=${e.title??``} .x=${e.x} .y=${e.y} .cells=${e.cells} .strings=${n}></cae-state-grid>`;case`note`:return k`<div class="note" data-tone=${e.tone&&e.tone!==`neutral`?e.tone:j}>${zi(Ii(e.text))}</div>`;default:return k`${j}`}var r}table(e,t){let n=(s=e).columns.map((e,t)=>{let n=e.format?Jd.has(e.format):s.rows.some(t=>typeof t[e.id]==`number`),r=e.bar?Math.max(0,...s.rows.map(t=>Number(t[e.id])||0)):0;return{id:e.id,header:e.label,tip:e.tip??void 0,align:e.align??(n?`end`:`start`),rowHeader:t===0,compare:(t,n)=>function(e,t){let n=e=>e==null||e===``;return n(e)||n(t)?n(e)===n(t)?0:n(e)?1:-1:typeof e==`number`&&typeof t==`number`?e-t:Yd(e).localeCompare(Yd(t))}(t[e.id],n[e.id]),text:t=>ec(t[e.id],e.format),cell:t=>{let n=t[e.id],i=ec(n,e.format),a=e.link?function(e){if(typeof e!=`string`||!/^https?:\/\//i.test(e.trim()))return null;try{let t=new URL(e.trim());return t.protocol===`http:`||t.protocol===`https:`?t.href:null}catch{return null}}(t[e.link]):null;return a?k`<a href=${a} target="_blank" rel="noopener noreferrer">${i}</a>`:e.bar&&typeof n==`number`?k`${i}<span class="jdur" aria-hidden="true"><i style="width: ${r>0?100*Math.max(0,n)/r:0}%"></i></span>`:i}}}),r=e.rows,i=new Map(r.map((e,t)=>[e,String(t)])),a=this.sorts.get(t)??null,o=a?function(e,t,n){let r=n&&t.find(e=>e.id===n.id);if(!n||!r)return[...e];let i=n.direction===`desc`?-1:1,{compare:a,text:o}=r,s=(e,t)=>{let n=o?o(e):r.cell(e,t);return typeof n==`number`||typeof n==`string`?n:``};return e.map((e,t)=>({r:e,i:t,v:a?0:s(e,t)})).sort((e,t)=>i*((e,t)=>a?a(e.r,t.r):typeof e.v==`number`&&typeof t.v==`number`?e.v-t.v:String(e.v).localeCompare(String(t.v),void 0,{numeric:!0}))(e,t)||e.i-t.i).map(e=>e.r)}(r,n,a):r;var s;return k`<cae-data-table .columns=${n} .rows=${o} .rowKey=${e=>i.get(e)??``} .rowTone=${qd} .activatable=${!1} .sort=${a} .cellStyles=${Xd} .caption=${e.title??``} .strings=${Hs(E(`No rows`))} @cae-sort=${e=>this.sorts=new Map(this.sorts).set(t,e.detail)} ></cae-data-table>`}};U([P({attribute:!1})],Zd.prototype,`body`,void 0),U([F()],Zd.prototype,`sorts`,void 0),Zd=U([N(`ca-panel-body`),D()],Zd);var Qd=class extends M{constructor(...e){super(...e),this.name=``}static{this.styles=[V,O` :host{display:block;}.tab-ic{opacity:1;margin-right:6px;font-size:12px;}.desc{margin:-4px 0 12px;}`]}render(){if(this.data===void 0)return this.panel?k`<div class="blank"><span class="ic" aria-hidden="true">…</span>${E(`Loading…`)}</div>`:k`<div class="blank"><span class="ic" aria-hidden="true">▤</span>${E(T`No custom view named ${this.name}`)}</div>`;let e=this.panel;return k`<section class="panel">
|
|
720
|
+
<h3><span class="tab-ic" aria-hidden="true">${e?.icon||`▤`}</span>${e?.title||this.name}
|
|
721
|
+
<span class="r">${E(`Custom view`)}</span></h3>
|
|
722
|
+
${e?.description?k`<div class="meta desc">${e.description}</div>`:j}
|
|
723
|
+
${he(this.data)?k`<ca-panel-body .body=${this.data}></ca-panel-body>`:k`<cae-json-tree .value=${this.data}></cae-json-tree>`}
|
|
724
|
+
</section>`}};U([P()],Qd.prototype,`name`,void 0),U([P({attribute:!1})],Qd.prototype,`panel`,void 0),U([P({attribute:!1})],Qd.prototype,`data`,void 0),Qd=U([N(`ca-panel-view`),D()],Qd);var $d=class{constructor(e){this.host=e,this.value=null,this.error=null,this.token=0}load(e,t,n){let r=++this.token;this.value=null,this.error=null,t&&n&&e&&this.fetch(r,e,t,n)}async fetch(e,t,n,r){let i,a=null;try{i=await t.task(n,r)}catch(e){i=(e=>({key:e,rows:[],launches:[],definition:null,io:{params:{},inputs:[],outputs:[],executor:`agent`,upstream:[],downstream:[]},stream:null}))(r),a=e}e===this.token&&(this.value=i,this.error=a,this.host.requestUpdate())}};function ef(e){let t=[],n=!1;for(let r of(e||``).split(`
|
|
725
|
+
`))/^Errors:\s*$/.test(r)?n=!0:n&&r.startsWith(`- `)?t.push(r.slice(2)):n&&r.trim()&&!r.startsWith(`- `)&&(n=!1);return t}R(`cae-transcript`,Eo);var tf=e=>!!e&&(e.prompt||``).startsWith(`The output file(s) you wrote do not pass their checks.`);function nf(e,t){let n=new Map(t.filter(e=>e.stop!==`invalid_input`&&e.stop!==`skipped`).map((e,t)=>[t+1,e])),r=[],i=0,a=0,o=0;return e.forEach((e,t)=>{let s=n.get(i)?.hops?.length??1;t>0&&tf(e)?a++:t>0&&o+1<s?(o++,a=0):(i++,o=0,a=0);let c=n.get(i)?.hops?.[o],l=c?.model||c?.route||``,u=a?`fixup`:o?`switch`:`try`;r.push({kind:u,tryNo:i,fixupNo:a,hopNo:o,model:l,result:null,rejectedWith:[],switchedStop:``,switchedTo:``,row:null})}),r.forEach((t,i)=>{let a=r[i+1];if(a&&a.tryNo===t.tryNo&&a.hopNo!==t.hopNo)return t.result=`switched`,t.switchedStop=n.get(t.tryNo)?.hops?.[t.hopNo]?.stop??``,void(t.switchedTo=a.model);if(a&&a.tryNo===t.tryNo)return t.result=`rejected`,void(t.rejectedWith=ef(e[i+1]?.prompt));let o=n.get(t.tryNo)??null;t.row=o,t.result=o?o.ok?`ok`:`failed`:null}),r}var rf=e=>/\[([\w.-]+)\]/.exec(e)?.[1]??``;function af(e){let t=/\[([\w.-]+)\]\s*(.*)$/.exec(e);return t?`${t[1]}: ${t[2]}`:e}function of(e,t,n=Jo(e.tryNo-1)){return t>1?e.fixupNo?K(n,E(T`correction ${e.fixupNo}`)):e.hopNo?K(n,E(`model switch`)):n:e.fixupNo?E(T`Correction ${e.fixupNo}`):e.hopNo?E(`Model switch`):Jo(0)}function sf(e){let t=e.model||E(`model`);return e.switchedTo?E(T`${t}: ${Z(e.switchedStop)} → ${e.switchedTo}`):E(T`${t}: ${Z(e.switchedStop)} → next model`)}var cf={claude:`Claude Code`,omp:`omp`,codex:`Codex`,opencode:`opencode`,gemini:`Gemini CLI`};function lf(e){let t=String(e||``).split(`/`).pop()??``;return cf[t]??t}var uf=(e,t)=>{let n=e.indexOf(t);return n>=0?e[n+1]??``:``};function df(e){let t=e.argv,n=/TELEMETRY [^\n]*role=([\w:-]+)/.exec(e.prompt||``)?.[1];return{agent:lf(t[0]),model:uf(t,`--model`)||uf(t,`-m`),role:n&&n!==`-`?n:``}}function ff(e){if(!e)return[];let t=[];return e.agent&&t.push({label:E(`coding agent`),value:e.agent,tip:E(`The CLI that ran the task (claude, omp)`)}),e.model&&t.push({label:E(`model`),value:e.model,tip:E(`The model the agent session ran on`),look:`mono`}),e.role&&t.push({label:E(`role`),value:e.role,tip:E(`The agent definition the coding agent ran as (agents/<role>.md)`),look:`quiet`}),t}function pf(e){let t=e.prompt||``,n=e.prompt_truncated||0;return[{id:`cmd`,code:!0,summary:E(`Command line`),text:e.argv.join(` `)},{id:`prompt`,summary:E(n?T`Prompt (${t.length} characters; ${n} characters not saved)`:T`Prompt (${t.length} characters)`),text:t+(n?`\n\n${E(T`(${n} characters not saved)`)}`:``)}]}function mf(e,t){if(e.result===`rejected`)return{tone:`attention`,title:E(`Output failed checks`),list:e.rejectedWith.map(e=>w(e,t)),note:E(`Sent in the correction prompt`)};if(e.result===`switched`)return{tone:`failed`,title:sf(e)};if(e.result===`failed`&&e.row){let n=w(e.row.reason,t)||Z(e.row.stop);return{tone:`failed`,title:E(T`Attempt ${e.tryNo} failed: ${n}`)}}}function hf(e,t,n){let r=t[t.length-1]?.tryNo??1,i=Yo(n.rows.filter(f)),a=e.rounds.length-1;return e.rounds.map((e,o)=>{let s=t[o],[c,l,u]=s?function(e,t){switch(e.result){case`ok`:return[`✓`,E(`passed`),E(`Output passed checks`)];case`rejected`:return[`✕`,E(`failed checks`),E(`Output failed checks`)];case`switched`:return[`✕`,Z(e.switchedStop),sf(e)];case`failed`:return[`✕`,E(`failed`),w(e.row?.reason,t)||Z(e.row?.stop)];default:return[``,``,``]}}(s,n.run):[``,``,``],d=e.who?.model;return{id:e.id,title:s?of(s,r,i[s.tryNo-1]):String(o+1),facts:d?[d.replace(/^claude-/,``)]:[],verdict:c?{tone:c===`✓`?`done`:`failed`,text:l,tip:u}:void 0,active:o===a&&n.active,tags:e.launch?ff(e.who):[],details:e.launch?pf(e.launch):[],items:e.items.map(e=>e.type===`event`?{...e,title:E(`API request sent again`)}:e),footer:s&&mf(s,n.run)}})}var gf=/\{\s*"title"\s*:\s*"((?:[^"\\]|\\.)*)"\s*,\s*"url"\s*:\s*"(https?:\/\/[^"\s]+)"/g,_f=/^\s*\[\d+\]\s+(.+)\n\s*(https?:\/\/\S+)/gm,vf=/https?:\/\/[^\s"'<>)\]]+/g;function yf(e){let t=e??``,n=[],r=new Set,i=(e,t)=>{r.has(t)||n.length>=20||(r.add(t),n.push({title:e.trim()||t,url:t}))};for(let e of t.matchAll(gf)){let t=e[1]??``;try{t=JSON.parse(`"${t}"`)}catch{}i(t,e[2]??``)}if(!n.length)for(let e of t.matchAll(_f))i(e[1]??``,e[2]??``);if(!n.length)for(let e of t.matchAll(vf))i(``,e[0].replace(/[.,;:!?]+$/,``));return n}var bf=()=>({rounds:[],tools:new Map,next:0}),xf=/session init:.*?model=([\w.\-:]+)/;function Sf(e){return`i`+e.next++}function Cf(e,t){let n={id:`r${e.rounds.length}`,launch:t,who:t?df(t):null,items:[]};return e.rounds.push(n),n}function wf(e){return e.rounds[e.rounds.length-1]??Cf(e,null)}function Tf(e,t){t?e.name=t:e.name||=`tool`,e.icon=(e.name.split(/[_:]/).pop()??``).toLowerCase()}function Ef(e,t,n){let r=n?e.tools.get(n):void 0;return r||(r={type:`tool`,id:n?`call:${n}`:Sf(e),call:n,name:``,icon:``,summary:``,intent:``,body:``,output:null,status:`running`},n&&e.tools.set(n,r),t.items.push(r)),r}function Df(e,t){let n=0;for(let i of t){let t=r(i);if(!t)continue;if(t.type===`launch`){Cf(e,t),n++;continue}let a=wf(e);switch(t.type){case`message_start`:case`message_end`:if(t.role!==`user`||!t.text)continue;a.items.push({type:`prompt`,id:Sf(e),text:t.text});break;case`turn_end`:if(!t.thinking)continue;a.items.push({type:`reasoning`,id:Sf(e),text:t.thinking});break;case`acall`:case`tool_execution_start`:case`tool_execution_update`:{let n=Ef(e,a,t.call);n.output===null?(Tf(n,t.tool),n.summary=No(t.cmd),n.intent=t.intent||``,n.body=t.cmd||n.body,t.web_query&&(n.query=t.web_query),t.web_fetch&&(n.page=t.web_fetch)):!n.summary&&t.cmd&&(n.summary=No(t.cmd));break}case`aresult`:case`tool_execution_end`:{let n=Ef(e,a,t.call);if(n.output!==null&&!t.out)break;Tf(n,t.tool),n.status=t.err?`error`:`ok`,!n.summary&&n.body&&(n.summary=No(n.body)),n.output=t.out||`(no output)`,n.query&&(n.links=yf(n.output));break}case`message_update`:{if(!t.delta)continue;let n=a.items[a.items.length-1];n?.type===`message`?n.text+=t.delta:a.items.push({type:`message`,id:Sf(e),text:t.delta});break}case`auto_retry_start`:a.items.push({type:`event`,id:Sf(e),icon:`↻`,title:``,text:t.err??``});break;case`notice`:{let n=xf.exec(t.text||``)?.[1];n&&(a.who??={agent:``,model:``,role:``},a.who.model||(a.who.model=n)),a.items.push({type:`notice`,id:Sf(e),text:(t.text||``).replace(/\s+/g,` `).trim()});break}}n++}return n}var Of=class{constructor(e){this.host=e,this.model=bf(),this.behind=0,this.count=0,this.ready=!1,this.version=0,this.generation=0,this.loaded=``,this.close=null,e.addController(this)}get tailing(){return this.close!==null}hostDisconnected(){this.stop(),this.loaded=``}stop(){this.close?.(),this.close=null}load(e,t){if(this.stop(),this.loaded=e,this.generation++,this.version++,this.model=bf(),this.behind=0,this.count=0,this.ready=!1,t&&`events`in t)this.count=Df(this.model,t.events),this.ready=!0;else if(t){let e=this.generation;this.close=function(e,t,n,r={}){return s(`${l(r)}/events/stream?run=${c(e)}&key=${c(t)}`,[`stream`],{...n,message:e=>n.message(e.data)},r)}(t.run,t.stream,{message:t=>this.onPage(t,e)},{baseUrl:t.baseUrl})}}append(e){e.length&&(this.count+=Df(this.model,e),this.version++)}onPage(e,t){t===this.generation&&(!this.ready&&e.behind&&(this.behind=e.behind),this.count+=Df(this.model,e.events),this.ready=!0,this.version++,this.host.requestUpdate())}async loadEarlier(e,t,n){let r=this.generation,i=Math.max(0,this.behind-3e3);this.behind=0,this.host.requestUpdate();let a=await e.stream(t,n,i);r===this.generation&&(this.model=bf(),Df(this.model,a.events),this.version++,this.host.requestUpdate())}};function kf(e){return k`<cae-markdown .text=${e} .split=${Vd} .strings=${{showRendered:E(`Show rendered`),showSource:E(`Show source`)}}></cae-markdown>`}R(`cae-markdown`,Vi);var Af=class extends M{constructor(...e){super(...e),this.events=null,this.run=``,this.stream=null,this.baseUrl=``,this.client=null,this.live=!1,this.round=null,this.rows=[],this.mode=`full`,this.shown=-1,this.feed=new Of(this),this.memory=null,this.drawn=null,this.lastSent=``,this.fed=null}static{this.styles=O` :host{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;position:relative;}:host([mode='none']){display:none;}:host([mode='tabs']){flex:none;}`}get source(){return this.events?`static`:this.run&&this.stream?`${this.run}\n${this.stream}`:``}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.requestUpdate()}willUpdate(e){let t=this.source;if(!e.has(`events`)&&t===this.feed.loaded)return;let n=this.fed,r=this.events;if(this.fed=r,r&&n&&t===this.feed.loaded&&function(e,t){if(e===t||e.length<t.length)return e===t;for(let n=t.length-1;n>=0;n--)if(e[n]!==t[n])return!1;return!0}(r,n))return void this.feed.append(r.slice(n.length));let{run:i,stream:a}=this,o=`transcript:${i}/${a??``}`,s=Xn(this),c=s===Kn?new Qn(`${o}:open`):new Zn(`${o}:open`,this),l=!this.events&&!!a;this.memory={isOpen:e=>c.has(e),setOpen:(e,t)=>c.set(e,t),scroll:()=>l?s.recall(`${o}:scroll`):void 0,setScroll:e=>l&&s.remember(`${o}:scroll`,e)},this.shown=-1,this.feed.load(t,this.events?{events:this.events}:t&&a?{run:i,stream:a,baseUrl:this.baseUrl}:null)}sections(){let e=this.live&&this.feed.tailing,t=[this.feed.version,this.rows,this.run,e,jn()];if(this.drawn?.key.every((e,n)=>e===t[n]))return this.drawn;let n=this.feed.model,r=nf(n.rounds.map(e=>e.launch),this.rows);return this.drawn={key:t,rounds:r,sections:hf(n,r,{run:this.run,rows:this.rows,active:e})},this.drawn}render(){let e=this.feed,{sections:t}=this.sections();return to(e.generation,k`<cae-transcript .sections=${t} .shown=${this.round===null?null:this.round-1} ?live=${this.live} .earlier=${e.behind} ?loading=${!e.ready} .count=${e.count} mode=${this.mode} .memory=${this.memory} .markdown=${Ii} .renderDetail=${e=>kf(e.text)} .strings=${{sections:E(`Agent sessions`),sectionsTip:[`${E(`Retry`)}: ${qo()}`,`${E(`Correction`)}: ${Ds()}`,`${E(`Model switch`)}: ${Ss()}`].join(`
|
|
726
|
+
`),loadEarlier:e=>E(e===1?`Show 1 earlier line`:T`Show ${e} earlier lines`),newBelow:e=>E(e===1?`Show 1 new event`:T`Show ${e} new events`),newInLatest:e=>E(e===1?`Show 1 new event in the running agent session`:T`Show ${e} new events in the running agent session`),prompt:E(`Prompt`),assistant:E(`Assistant`),reasoning:E(`Reasoning`),characters:e=>E(T`${e} characters`),tool:E(`tool`),results:e=>E(e===1?`1 result`:T`${e} results`),done:E(`done`,{id:`tool-done`}),failed:E(`failed`),running:E(`running`),interrupted:E(`interrupted`),interruptedTip:E(`The run ended before the tool call returned`),query:E(`query`),page:E(`page`),fullText:E(`Full text`),showAll:e=>E(T`Show all (${e} characters)`),showLess:E(`Show less`)}} @cae-section-change=${e=>{e.stopPropagation(),Q(this,`ca-navigate`,{round:e.detail.index===null?null:e.detail.index+1})}} @cae-section-shown=${e=>{e.stopPropagation(),this.shown=e.detail.index}} @cae-load-earlier=${t=>{t.stopPropagation(),this.stream&&e.loadEarlier(this.client??a({baseUrl:this.baseUrl}),this.run,this.stream)}}></cae-transcript>`)}updated(){let{rounds:e}=this.sections(),t=`${this.feed.version}|${this.shown}|${e.length}|${this.rows.length}`;t!==this.lastSent&&(this.lastSent=t,Q(this,`ca-rounds`,{launches:this.feed.model.rounds.map(e=>e.launch),shown:this.shown,rounds:e},{bubbles:!1}))}revealWebSearch(e,t=0){let n=this.feed.model.rounds.flatMap(e=>e.items).filter(t=>t.type===`tool`&&t.query===e)[t],r=n&&this.view?this.view.reveal(n.id):-1;if(!(r<0))return{round:r===this.feed.model.rounds.length-1?null:r+1}}};U([P({attribute:!1})],Af.prototype,`events`,void 0),U([P()],Af.prototype,`run`,void 0),U([P({attribute:!1})],Af.prototype,`stream`,void 0),U([P({attribute:`base-url`})],Af.prototype,`baseUrl`,void 0),U([P({attribute:!1})],Af.prototype,`client`,void 0),U([P({type:Boolean})],Af.prototype,`live`,void 0),U([P({attribute:!1})],Af.prototype,`round`,void 0),U([P({attribute:!1})],Af.prototype,`rows`,void 0),U([P({reflect:!0})],Af.prototype,`mode`,void 0),U([F()],Af.prototype,`shown`,void 0),U([xn(`cae-transcript`)],Af.prototype,`view`,void 0),Af=U([N(`ca-transcript`),D()],Af);var jf=e=>C(e.io)||e.rows.some(C),Mf=e=>!jf(e)&&(!!e.stream||e.launches.length>0||e.rows.some(f)),Nf=e=>e.live?`running`:e.outcomes.get(e.detail.key)?.outcome??p(void 0,e.detail.rows),Pf=(e,t)=>e.detail.io.upstream.find(e=>e.outputs.some(e=>e.path===t)),Ff=e=>t=>{let n=Pf(e,t);if(!n)return;let r=n.outputs.find(e=>e.path===t);return{name:q(n),written:!!r?.file.exists,outcome:e.outcomes.get(n.key)?.outcome}},If=e=>Xo((e.rounds||1)-1),Lf=(e,t)=>k`<a class="lnk" href="#" @click=${n=>{n.preventDefault(),Q(e.host,`ca-open-task`,{key:t.key})}}>${q(t)}</a>`,Rf=new Set([`key`,`rows`,`launches`,`stream`,`task_detail_error`,`definition`,`io`,`row_extras`]);function zf(e){for(let t=e.launches.length-1;t>=0;t--){let n=e.launches[t],r=n?df(n).model:``;if(r)return r}return``}function Bf(e){let t=[...new Set(e.flatMap(e=>[...(e.hops??[]).map(e=>e.credential),e.credential]).filter(e=>!!e))];if(!t.length)return[];let n=[E(`Account or API key the coding agent used (credential)`),...t.map(rs)].filter(Boolean).join(`
|
|
727
|
+
`);return[{label:E(`identity`),value:Mo(t.map(ns)),tip:n,look:`quiet`}]}function Vf(e,t,n=``,r={}){let i=t===`output`?k`${Uc(e.status)}${(e.rounds??0)>1?k` <span class="meta" title=${Ds()}>${Os(e.rounds,e.status===`valid`)}</span>`:j}`:Hc(e),a=k`<div class="io-hd">${r.chip??i}<span class="jmono ct-path" title=${e.path}>${w(e.path,n)}</span></div>${r.origin?k`<div class="meta io-from">${r.origin}</div>`:j}`;if(t===`output`&&e.status===`refused`)return k`<div class="io-card one">${a}<div class="meta">${ks(e,n,r.producerOf)}</div></div>`;if(t===`output`&&e.status===`failed`&&!e.file.exists)return k`<div class="io-card one">${a}</div>`;let o=e.errors??[];return k`<div class="io-card">
|
|
728
|
+
${a}
|
|
729
|
+
${qc(e,t)}
|
|
730
|
+
${Wc(e)}
|
|
731
|
+
${o.length?k`<h4>${E(`Errors`)}</h4><pre class="ct-err">${o.map(e=>w(e,n)).join(`
|
|
732
|
+
`)}</pre>`:j}
|
|
733
|
+
</div>`}var Hf=e=>!e.file.exists||e.status!=null&&e.status!==`valid`,Uf=e=>Zr({text:Fo(e),tone:Ho(e),mark:Wo(e)}),Wf=O` :host{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;position:relative;container-type:inline-size;}.taskmeta{flex:none;background:linear-gradient(180deg,var(--panel2),var(--panel));border:1px solid var(--line);border-radius:14px;padding:10px 12px;margin-bottom:8px;color:var(--text-2);}.tm-head{display:flex;gap:12px;align-items:center;}.tm-av{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;font-size:16px;flex:none;background:var(--agent-bg);color:var(--agent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--agent) 35%,transparent);}.tm-av.py{background:var(--raise);color:var(--text-muted);box-shadow:none;}.tm-name{font-size:15px;font-weight:600;color:var(--text);display:flex;gap:8px;align-items:center;}.verdict{font-size:12.5px;color:var(--text);margin-top:2px;}.verdict[data-tone='failed'],.verdict[data-tone='attention']{color:var(--tone);}.verdict[data-tone='muted']{color:var(--text-muted);}.whos{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;}.runchips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;}.spend{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:6px;font-size:12px;color:var(--text-muted);font-variant-numeric:tabular-nums;}.spend b{color:var(--text);font-weight:600;}.spend.quota{flex-direction:column;gap:0;}.usage-wrap{overflow-x:auto;margin:4px 0 12px;}.usage{width:auto;border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums;}.usage th{text-align:right;font-weight:600;color:var(--text-muted);font-size:10.5px;white-space:nowrap;padding:6px 14px;border-bottom:1px solid var(--line2);vertical-align:bottom;}.usage td{text-align:right;padding:8px 14px;border-bottom:1px solid var(--line);white-space:nowrap;vertical-align:baseline;}.usage th:first-child,.usage td:first-child{padding-left:4px;}.usage td.l.jmono{font-size:12px;}.usage td.l:not(:first-child):not(.jmono){white-space:normal;min-width:12ch;}.usage th.l,.usage td.l{text-align:left;}.usage tr.hop td{padding-top:4px;padding-bottom:4px;color:var(--text-muted);}.usage tr.hop td:first-child{padding-left:28px;}.runchip{font-size:11px;padding:2px 9px;border-radius:999px;border:1px solid var(--line2);color:var(--text-2);}.runchip.ok>[aria-hidden]{color:var(--status-done);font-weight:700;}.runchip.part{border-color:color-mix(in srgb,var(--status-attention) 45%,transparent);background:var(--status-attention-bg);}.runchip.part>[aria-hidden]{color:var(--status-attention);font-weight:700;}.runchip.bad{border-color:color-mix(in srgb,var(--status-failed) 45%,transparent);color:var(--status-failed);background:var(--status-failed-bg);}.io-fold{margin-top:6px;}.io-fold>summary,.launch>summary{cursor:pointer;color:var(--text-muted);}.searches{margin:4px 0 0;padding-left:22px;}.unread{color:var(--status-attention);margin-top:4px;}.qlink{background:none;border:0;padding:0;color:var(--accent);cursor:pointer;text-align:left;font:inherit;}.qlink:hover{text-decoration:underline;}.tviews{flex:none;display:flex;flex-wrap:wrap;gap:4px;margin:2px 0 8px;border-bottom:1px solid var(--line);}@container (max-width:480px){.tviews{gap:0;}.tview{padding:6px 10px;}}.tview{background:none;border:0;border-bottom:2px solid transparent;color:var(--text-muted);padding:6px 14px;cursor:pointer;}.tview:hover{color:var(--text-2);}.tview.sel{color:var(--text);border-bottom-color:var(--accent);}.tview .badge{margin-left:6px;font-size:10px;padding:0 6px;border-radius:999px;background:var(--raise);color:var(--text-2);}.pane{flex:1 1 auto;min-height:0;overflow:auto;position:relative;}.upstream{margin-bottom:12px;}.up-hd{display:flex;align-items:center;gap:10px;margin:2px 0 6px;}.down{display:flex;flex-wrap:wrap;gap:8px;}.notrans{flex:1 1 auto;border:1px solid var(--line);border-radius:14px;}details.upstream>summary{cursor:pointer;list-style:none;}details.upstream>summary::-webkit-details-marker{display:none;}.params td{vertical-align:top;}.from{color:var(--text-muted);white-space:nowrap;}`,Gf=class extends M{constructor(...e){super(...e),this.baseUrl=``,this.run=``,this.taskKey=null,this.view=`transcript`,this.round=null,this.live=!1,this.journal=[],this.plan=null,this.exported=!1,this.replayMarks=!1,this.detail=new $d(this),this.launches=[],this.shownRound=-1,this.rounds=[],this.outcomes=new Map}static{this.styles=[V,Yc,So,zu,Wf]}willUpdate(e){(e.has(`run`)||e.has(`taskKey`)||e.has(`client`))&&(this.detail.load(this.client,this.run,this.taskKey),this.launches=[],this.shownRound=-1,this.rounds=[]),this.outcomes=this.plan?S(this.journal,this.plan).outcomes:new Map}shownView(e){return this.view===`transcript`&&jf(e)&&!e.stream?`output`:this.view}revealSearch(e,t){let n=this.transcriptEl?.revealWebSearch(e,t);Q(this,`ca-navigate`,n?{view:`transcript`,round:n.round}:{view:`transcript`})}render(){let e=this.taskKey;if(!e)return k`<div class="blank"><span class="ic" aria-hidden="true">✦</span><b>${E(`No task selected`)}</b></div>`;let t=this.detail.value;if(!t)return k`<div class="taskmeta meta"><strong>${e}</strong> ${E(`Loading…`)}</div>`;let n={host:this,run:this.run,detail:t,live:t.launches.length>0&&this.live,journal:this.journal,plan:this.plan,outcomes:this.outcomes,launches:this.launches,shownRound:this.shownRound,rounds:this.rounds,exported:this.exported,replayMarks:this.replayMarks},r=this.shownView(t);return k`${function(e,t,n){let r=e.detail,i=e.live,{rows:a,launches:o}=r,s=jf(r),c=Mf(r),l=a.slice().sort((e,t)=>String(e.ts).localeCompare(String(t.ts))),d=l[l.length-1],p=o[0],m={agent:lf(p?.cmd?p.cmd.split(` `)[0]:d?.agent),model:p?.model||d?.model||zf(e),role:p?.role||``},h=c?[...new Set(l.map(e=>e.model).filter(e=>!!e&&e!==m.model))]:[],g=a[0],_=a.filter(f),v=Object.entries(r).filter(([e])=>!Rf.has(e)),[y,b]=function(e){let t=e.detail.rows,n=t.filter(f),r=t[t.length-1],i=Nf(e);switch(i){case`running`:return[E(`Running`),`neutral`];case`waiting`:{let t=e.plan?.nodes.find(t=>t.key===e.detail.key),n=t?.deferred?ys(t.deferred_cause,t.deferred,u(e.plan,t.deferred_cause)):``;return n?[E(T`Not run: ${n}`),`attention`]:[E(`Waiting`),`muted`]}case`skipped`:return[E(`Skipped`),`muted`];case`not_started`:{let t=function(e){let t=e.detail,n=Ko(e.outcomes.get(t.key)??{attempts:t.rows,cause:null},e.outcomes,e.run,t=>Pf(e,t)?.key);if(n)return n;let r=ze(t.rows[t.rows.length-1]?.reason)[0],i=r?Pf(e,r.path):void 0;return r?Go(w(r.path,e.run),r.problem,i?{name:q(i)}:void 0):``}(e);return[E(t?T`Not started: ${t}`:`Not started`),`attention`]}case`partial`:{let t=w(r?.reason,e.run);return[E(t?T`Partly done: ${t}`:`Partly done`),`attention`]}case`failed`:{let t=w(r?.reason,e.run)||Z(r?.stop);return[n.length>1?E(T`Failed on all ${n.length} attempts: ${t}`):E(T`Failed: ${t}`),`failed`]}}if(!r)return[Fo(i),`neutral`];let a=n.filter(e=>!e.ok);if(a.length){let t=w(a[0]?.reason,e.run)||Z(a[0]?.stop);return[a.length===1?E(T`Done on attempt ${n.length} | 1 failed attempt | first failure: ${t}`):E(T`Done on attempt ${n.length} | ${a.length} failed attempts | first failure: ${t}`),`neutral`]}let o=(r.rounds||1)-1+(r.hook_errors??[]).length;if(o>0){let t=[...(r.hook_errors??[]).flat(),...(r.round_errors??[]).flat(),...e.rounds.flatMap(e=>e.rejectedWith)],n=t[0]?af(w(t[0],e.run)):``;return n?[E(o===1?T`Done after 1 correction | first failed check: ${n}`:T`Done after ${o} corrections | first failed check: ${n}`),`neutral`]:[E(o===1?`Done after 1 correction`:T`Done after ${o} corrections`),`neutral`]}let s=ws(r.hops,null,r.skipped_hops);return s?[E(T`Done after a model switch: ${s}`),`neutral`]:[E(`Done`),`neutral`]}(e),x=E(s?`Python task`:`Agent task`),S=e.plan?.nodes.find(e=>e.key===r.key);return k`<div class="taskmeta">
|
|
734
|
+
<div class="tm-head">
|
|
735
|
+
${Ru(s,x,`tm-av `+(s?`py`:``))}
|
|
736
|
+
<div style="min-width:0">
|
|
737
|
+
<div class="tm-name" title=${t}>${g?q(g):S?q(S):t.replace(/^python:/,``)} ${i?Zr({text:E(`running`),tone:`running`}):j}</div>
|
|
738
|
+
<div class="verdict" data-tone=${I(b)}>${y}</div>
|
|
739
|
+
${S?.claims?.length?k`<div class="meta" title=${Us()}>
|
|
740
|
+
${E(`Locks`)} ${S.claims.map(e=>Zr({text:e}))}
|
|
741
|
+
</div>`:j}
|
|
742
|
+
${S?.priority?k`<div class="meta" title=${hc()}>${mc(S.priority)}</div>`:j}
|
|
743
|
+
${c?k`<div class="whos">
|
|
744
|
+
${xo([...ff(m),...Bf(_)])}
|
|
745
|
+
${h.length?k`<span class="meta">${E(h.length===1?T`Earlier attempts used model ${h[0]??``}`:T`Earlier attempts used models ${Mo(h)}`)}</span>`:j}
|
|
746
|
+
</div>`:j}
|
|
747
|
+
${o.length?k`<div class="meta">${o.length===1?E(`1 agent session running`):E(T`${o.length} agent sessions running`)}</div>`:j}
|
|
748
|
+
${function(e,t){if(!e)return j;let n=function(e){let t=null;for(let n of e){let e=n.usage?.peak_context;e!=null&&(t===null||e>(t.usage?.peak_context??0))&&(t=n)}return t}(t),r=t.find(e=>e.context_warned);return k`<div class="spend">
|
|
749
|
+
<b title=${E(`Reported by the coding agent`)}>${Y(e.cost)}</b>
|
|
750
|
+
<span>${E(T`Tokens: ${J(e.input)} input, ${J(e.output)} output, ${J(e.cache_read)} cache read, ${J(e.cache_creation)} cache write`)}</span>
|
|
751
|
+
<span>${e.calls===1?E(`1 API call`):E(T`${e.calls} API calls`)}</span>
|
|
752
|
+
${n?k`<span title=${_c()}>${vc(n)}</span>`:j}
|
|
753
|
+
${r?k`<span class="tone-text" data-tone="attention" title=${bc()}>${yc(r)}</span>`:j}
|
|
754
|
+
</div>`}(De(a),_)}
|
|
755
|
+
${function(e,t){let n=Fe(e.journal.length?e.journal:t),r=t[0],i=t[t.length-1],a=r?Re(r,n).start:null;if(!a||!i)return j;let o=Re(i,n).next;return k`<div class="spend quota">
|
|
756
|
+
<span title=${ls(a)}>${E(T`Usage at session start: ${cs(a)}`)}</span>
|
|
757
|
+
${o?k`<span title=${ls(o)}>${E(T`Usage after this task: ${cs(o)}`)}</span>`:j}
|
|
758
|
+
</div>`}(e,_)}
|
|
759
|
+
</div>
|
|
760
|
+
</div>
|
|
761
|
+
${_.length?k`<div class="runchips">${Yo(_).map((t,n)=>function(e,t,n,r,i){let a=t.stop===`partial`?`part`:t.ok?`ok`:`bad`,o=!!e.replayMarks&&!!t.replayed,s=w(t.reason,e.run),c=ws(t.hops,null,t.skipped_hops),l=[E(T`Ended ${G(t.ts,!0)}`),If(t),r&&t.model?E(T`Model ${t.model}`):``,c?E(T`Model switch: ${c}`):``,vc(t),t.context_warned?yc(t):``,s,t.route||``,o?Ps():``,...qs(t,i).map(([e,t])=>`${e}: ${t}`)].filter(Boolean).join(`
|
|
762
|
+
`),u=t.cost_usd!==null&&t.cost_usd!==void 0?Y(t.cost_usd):``;return k`<span class="runchip ${a}" title=${l}>
|
|
763
|
+
${(e=>e.stop===`partial`?k`<span aria-hidden="true">◌</span><span class="sr">${Fo(`partial`)}</span>`:k`<span aria-hidden="true">${e.ok?`✓`:`✕`}</span><span class="sr">${e.ok?E(`passed`):E(`failed`)}</span>`)(t)} ${K(n,Z(t.stop,t.reason),z(t.wall_s),u,o?Ns():``)}
|
|
764
|
+
</span>`}(e,_[n],t,c,r.row_extras??[]))}</div>`:j}
|
|
765
|
+
${function(e,t){let n=e[e.length-1],r=n?qs(n,t):[];if(!r.length)return j;let i=Gs();return k`<div class="whos">${xo(r.map(([e,t])=>({label:e,value:t,tip:i,look:`quiet`})))}</div>`}(_,r.row_extras??[])}
|
|
766
|
+
${function(e,t){let n=e.flatMap(e=>e.web_queries??[]),r=new Map;return n.length?k`<details class="io-fold">
|
|
767
|
+
<summary>${n.length===1?E(`1 web search`):E(T`${n.length} web searches`)}</summary>
|
|
768
|
+
<ol class="meta searches">
|
|
769
|
+
${n.map(e=>{let n=r.get(e)??0;return r.set(e,n+1),k`<li><button class="qlink jmono" @click=${()=>t(e,n)}>
|
|
770
|
+
${e}
|
|
771
|
+
</button></li>`})}
|
|
772
|
+
</ol>
|
|
773
|
+
</details>`:j}(_,n)}
|
|
774
|
+
${function(e){let t=Yo(e),n=e.filter(e=>e.changes).length,r=e.flatMap((e,r)=>{let i=e.changes;if(!i)return[];let a=n>1?t[r]??``:``,o=new Set(i.removed),s=(e,t)=>(e??[]).map(e=>K(a,e,function(e){switch(e){case`created`:return E(`created`);case`modified`:return E(`modified`);case`deleted`:return E(`deleted`);case`removed`:return E(`created, removed after the failed attempt`)}}(o.has(e)?`removed`:t)));return[...s(i.created,`created`),...s(i.modified,`modified`),...s(i.deleted,`deleted`)]});return n?r.length?k`<details class="io-fold">
|
|
775
|
+
<summary title=${E(`Files under the task's declared patterns that its attempts created, modified or deleted (changes)`)}>${i=r.length,E(i===1?`1 changed file`:T`${i} changed files`)}</summary>
|
|
776
|
+
<ul class="meta searches jmono">${r.map(e=>k`<li>${e}</li>`)}</ul>
|
|
777
|
+
</details>`:k`<div class="meta">${E(`No changed files`)}</div>`:j;var i}(_)}
|
|
778
|
+
${Po(_)?k`<div class="meta unread" title=${E(`Event types this contraagent version does not know (unread_events)`)}>
|
|
779
|
+
<span aria-hidden="true">⚠</span> ${E(T`Unrecognized events: ${Po(_)}`)}
|
|
780
|
+
</div>`:j}
|
|
781
|
+
${r.task_detail_error?k`<div class="meta v-bad">${E(T`The task_detail callback failed: ${r.task_detail_error??``}`)}</div>`:j}
|
|
782
|
+
${o.map(e=>k`<details class="launch">
|
|
783
|
+
<summary>${K(E(T`Process ${e.pid??`—`}`),e.key||``)}</summary>
|
|
784
|
+
<div class="meta">${K(E(T`Plugin ${e.plugin||E(`none`,{id:`none`})}`),E(T`Model ${e.model||`—`}`),E(T`Role ${e.role||E(`none`,{id:`none`})}`))}</div>
|
|
785
|
+
</details>`)}
|
|
786
|
+
${v.map(([e,t])=>k`<details class="io-fold"><summary>${e}</summary><cae-json-tree .value=${t}></cae-json-tree></details>`)}
|
|
787
|
+
</div>`}(n,e,(e,t)=>this.revealSearch(e,t))} ${this.renderViews(t,r)}
|
|
788
|
+
${t.stream?k`<ca-transcript .run=${this.run} .stream=${t.stream} base-url=${this.baseUrl} .client=${this.client} .live=${n.live} .rows=${t.rows} .round=${this.round} mode=${r===`transcript`?`full`:r===`input`?`tabs`:`none`} @ca-rounds=${e=>{this.launches=e.detail.launches,this.shownRound=e.detail.shown,this.rounds=e.detail.rounds}}></ca-transcript>`:r===`transcript`?function(e){let t=e.detail,n=Nf(e);if(n===`not_started`){let t=function(e){let t=e.detail,n=ze(t.rows[t.rows.length-1]?.reason)[0],r=n?.producer?e.outcomes.get(n.producer):void 0;if(r)return r;let i=n?Pf(e,n.path):void 0;if(i)return i;let a=e.outcomes.get(t.key)?.cause;return a?e.outcomes.get(a):void 0}(e);return k`<div class="blank notrans"><span class="ic" aria-hidden="true">⊘</span><b>${K(E(`No transcript`),Fo(n))}</b>
|
|
789
|
+
${t?k`<span>${E(k`Earlier task ${Ic(e.host,q(t),t)}`)}</span>`:j}</div>`}if(e.exported&&Mf(t))return k`<div class="blank notrans"><span class="ic" aria-hidden="true">✦</span><b>${K(E(`No transcript`),ic())}</b></div>`;if(Mf(t))return k`<div class="blank notrans"><span class="ic" aria-hidden="true">✦</span><b>${K(E(`No transcript`),E(`not saved (keep_transcripts = false)`))}</b></div>`;let r=n===`waiting`&&!!e.plan?.nodes.find(e=>e.key===t.key)?.deferred;return k`<div class="blank notrans"><span class="ic" aria-hidden="true">✦</span><b>${K(E(`No transcript`),r?Io(n,!1):Fo(n))}</b></div>`}(n):j}
|
|
790
|
+
${r===`transcript`?j:k`<div class="pane">${this.renderPane(n,r)}</div>`}`}renderViews(e,t){let n=e.io,r=jf(e)&&!e.stream,i={input:new Set([...n.inputs.map(e=>e.path),...n.upstream.flatMap(e=>e.outputs.map(e=>e.path))]).size+Object.keys(n.params).length,output:n.outputs.length};return k`<div class="tviews" role="tablist">
|
|
791
|
+
${nr.filter(e=>!(r&&e===`transcript`)).map(e=>{let n={transcript:E(`Transcript`),input:E(`Input`),output:E(`Output`,{id:`view-output`}),definition:E(`Definition`)}[e];return k`<button type="button" role="tab" aria-selected=${e===t} class="tview ${e===t?`sel`:``}" @click=${()=>Q(this,`ca-navigate`,{view:e})}>
|
|
792
|
+
${n}${i[e]?k`<span class="badge">${i[e]}</span>`:j}
|
|
793
|
+
</button>`})}
|
|
794
|
+
</div>`}renderPane(e,t){return t===`input`?function(e){let t=e.detail,n=t.io,r=Object.entries(n.params),{files:i,earlier:a}=function(e){let t=new Set(e.inputs.map(e=>e.path)),n=e.inputs.map(t=>{for(let n of e.upstream){let e=n.outputs.find(e=>e.path===t.path);if(e)return{spec:t,from:n,out:e}}return{spec:t,from:null,out:null}}),r=e.upstream.map(e=>({task:e,read:e.outputs.filter(e=>t.has(e.path)).length,rest:e.outputs.filter(e=>!t.has(e.path))})),i=e=>Number(e.task.outputs.some(Hf));return{files:n,earlier:[...r].sort((e,t)=>i(t)-i(e))}}(n);return k`<h4 class="sect-h">${E(`Parameters`)}</h4>
|
|
795
|
+
${r.length?k`<table class="ct-fields params">
|
|
796
|
+
${r.map(([t,r])=>{let i=(e=>n.upstream.find(t=>t.outputs.some(t=>t.file.exists&&((e,t)=>{try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}})(t.file.content,e))))(r);return k`<tr>
|
|
797
|
+
<td class="jmono">${t}</td>
|
|
798
|
+
<td>${typeof r==`object`&&r?k`<cae-json-tree .value=${r} .open=${0}></cae-json-tree>`:k`<span class="jmono">${(e=>typeof e==`string`?e:JSON.stringify(e)??String(e))(r)}</span>`}</td>
|
|
799
|
+
<td>${i?k`<span class="from">${E(k`From ${Lf(e,i)}`)}</span>`:j}</td>
|
|
800
|
+
</tr>`})}
|
|
801
|
+
</table>`:k`<div class="meta">${E(`No parameters`)}</div>`}
|
|
802
|
+
<h4 class="sect-h">${E(`Input files`)}</h4>
|
|
803
|
+
${i.length?i.map(t=>function(e,t){let n=t.from,r=n?e.outcomes.get(n.key)?.outcome:void 0,i=n?k`<span>${E(k`Output of ${Lf(e,n)}`)}</span>${r&&r!==`done`?Uf(r):j}`:E(`File from before the run`),a=t.out?.status;if(!a)return Vf(t.spec,`input`,e.run,{origin:i});let o=Uc(a);return Vf({...t.spec,status:a},`input`,e.run,{origin:i,chip:o})}(e,t)):k`<div class="meta">${E(`No input files`)}</div>`}
|
|
804
|
+
<h4 class="sect-h">${E(`Earlier tasks`)}</h4>
|
|
805
|
+
${a.length?a.map(t=>function(e,t){let n=t.task,r=C(n)?E(`Python task`):E(`Agent task`),i=e.outcomes.get(n.key)?.outcome,a=n.outputs.length,o=a?K(E(a===1?`1 output file`:T`${a} output files`),t.read?t.read===1?E(`1 read by this task`):E(T`${t.read} read by this task`):``):E(`No output files`),s=k`<div class="up-hd">
|
|
806
|
+
${Ru(C(n),r)}
|
|
807
|
+
${Lf(e,n)}
|
|
808
|
+
${i?Uf(i):j}
|
|
809
|
+
<span class="meta">${o}</span>
|
|
810
|
+
</div>`;if(!t.rest.length)return k`<div class="upstream">${s}</div>`;let c=t.rest.map(t=>Vf(t,`output`,e.run,{producerOf:Ff(e)}));return t.rest.some(Hf)?k`<div class="upstream">${s}${c}</div>`:k`<details class="upstream"><summary>${s}</summary>${c}</details>`}(e,t)):k`<div class="meta">${E(`No earlier tasks`)}</div>`}
|
|
811
|
+
${jf(t)?j:function(e){let t=e.detail,n=e.launches.length,r=e.shownRound,i=e.rounds[r],a=e.rounds[e.rounds.length-1]?.tryNo??1,o=t.rows.filter(f),s=Yo(o),c=le(o),l=e.launches[r]?.prompt??``,u=Nf(e);return k`<h4 class="sect-h">${E(`Prompt`)}${n>1&&i?k` <span class="meta">${of(i,a,s[i.tryNo-1])}: ${function(e,t=!1){return e.fixupNo?E(`same agent session, after failed checks`):e.hopNo?E(`new agent session on the next model`):e.tryNo>1&&t?E(`new agent session in the resumed run`):e.tryNo>1?E(T`new agent session after attempt ${e.tryNo-1} failed`):E(`first agent session`)}(i,c[i.tryNo-1]!==c[i.tryNo-2])}</span>`:j}</h4>
|
|
812
|
+
${l?kf(l):k`<div class="meta">${t.stream?E(`Loading…`):Mf(t)?K(E(`No prompt`),E(`not saved (keep_transcripts = false)`)):K(E(`No prompt`),Fo(u))}</div>`}`}(e)}`}(e):t===`output`?function(e){let t=e.detail,n=t.io,r=t.rows[t.rows.length-1];return k`<h4 class="sect-h">${E(`Output files`)}</h4>
|
|
813
|
+
${n.outputs.length?n.outputs.map(t=>Vf(t,`output`,e.run,{producerOf:Ff(e)})):k`<div class="meta">${E(`No output files`)}</div>`}
|
|
814
|
+
${r?k`<h4 class="sect-h">${E(`Outcome`)}</h4>
|
|
815
|
+
<div class="ct-in">
|
|
816
|
+
${Zr({text:Z(r.stop,r.reason),tone:Vo(r.stop)})}
|
|
817
|
+
${f(r)?k`<span class="meta">${K(Jo(r.attempt),z(r.wall_s),If(r))}</span>`:j}
|
|
818
|
+
</div>`:j}
|
|
819
|
+
${function(e,t){let n=t.filter(e=>f(e)&&(e.usage||e.cost_usd!==null&&e.cost_usd!==void 0));if(!n.length)return j;let r=k`<td class="jdim">—</td>`,i=Fe(e.journal.length?e.journal:t),a=n.some(e=>(e.quota??[]).length),o=k`<td class="l jdim">—</td>`,s=(e,t)=>e?k`<td class="l" title=${ls(e)}>${(e.credential??``)===(t??``)?cs(e):us(e)}</td>`:o;return k`<h4 class="sect-h">${E(`Tokens and cost`)}</h4>
|
|
820
|
+
<div class="usage-wrap" data-scroll="x"><table class="usage">
|
|
821
|
+
<tr>
|
|
822
|
+
<th class="l"></th><th>${E(`Input`)}</th><th>${E(`Output`,{id:`tokens-output`})}</th><th>${E(`Cache read`)}</th><th>${E(`Cache write`)}</th>
|
|
823
|
+
<th>${E(`API calls`)}</th><th title=${E(`Reported by the coding agent`)}>${E(`Cost`)}</th><th class="l">${E(`Identity`)}</th>
|
|
824
|
+
${a?k`<th class="l" title=${E(`Subscription usage when the agent session started (account-wide)`)}>${E(`Usage at start`)}</th>
|
|
825
|
+
<th class="l" title=${E(`The first reading of the same account after this attempt ended`)}>${E(`Usage after`)}</th>`:j}
|
|
826
|
+
</tr>
|
|
827
|
+
${n.map(e=>{let t=e.usage,n=e.hops??[];return k`<tr>
|
|
828
|
+
<td class="l">${Jo(e.attempt)}</td>
|
|
829
|
+
${t?k`<td>${J(t.input)}</td><td>${J(t.output)}</td><td>${J(t.cache_read)}</td><td>${J(t.cache_creation)}</td><td>${t.calls}</td>`:k`${r}${r}${r}${r}${r}`}
|
|
830
|
+
<td>${Y(e.cost_usd)}</td><td class="l" title=${rs(e.credential)||j}>${ns(e.credential)||`—`}</td>
|
|
831
|
+
${a?k`${s(Re(e,i).start,e.credential)}${s(Re(e,i).next,e.credential)}`:j}
|
|
832
|
+
</tr>
|
|
833
|
+
${n.length>1?n.map(e=>k`<tr class="hop">
|
|
834
|
+
<td class="l">${K(e.model||e.route||`—`,Z(e.stop))}</td>
|
|
835
|
+
<td></td><td></td><td></td><td></td><td></td>
|
|
836
|
+
<td>${Y(e.cost_usd)}</td><td class="l" title=${rs(e.credential)||j}>${ns(e.credential)||`—`}</td>
|
|
837
|
+
${a?k`<td></td><td></td>`:j}
|
|
838
|
+
</tr>`):j}`})}
|
|
839
|
+
</table></div>`}(e,t.rows)}
|
|
840
|
+
<h4 class="sect-h">${E(`Later tasks`)}</h4>
|
|
841
|
+
${n.downstream.length?k`<div class="down">${n.downstream.map(t=>Ic(e.host,q(t),t))}</div>`:k`<div class="meta">${E(`No later tasks`)}</div>`}`}(e):(e=>k`<ca-definition .definition=${e.detail.definition??null} memory="task-definition"></ca-definition>`)(e)}};U([P({attribute:!1})],Gf.prototype,`client`,void 0),U([P({attribute:`base-url`})],Gf.prototype,`baseUrl`,void 0),U([P()],Gf.prototype,`run`,void 0),U([P({attribute:!1})],Gf.prototype,`taskKey`,void 0),U([P()],Gf.prototype,`view`,void 0),U([P({attribute:!1})],Gf.prototype,`round`,void 0),U([P({type:Boolean})],Gf.prototype,`live`,void 0),U([P({attribute:!1})],Gf.prototype,`journal`,void 0),U([P({attribute:!1})],Gf.prototype,`plan`,void 0),U([P({type:Boolean})],Gf.prototype,`exported`,void 0),U([P({type:Boolean,attribute:`replay-marks`})],Gf.prototype,`replayMarks`,void 0),U([xn(`ca-transcript`)],Gf.prototype,`transcriptEl`,void 0),U([F()],Gf.prototype,`launches`,void 0),U([F()],Gf.prototype,`shownRound`,void 0),U([F()],Gf.prototype,`rounds`,void 0),Gf=U([N(`ca-task-view`),D()],Gf);var Kf=class extends M{constructor(){super(),new Fr(this)}createRenderRoot(){return this}render(){return new Date().toLocaleTimeString(jn(),{hour12:!1})}};Kf=U([N(`ca-clock`),D()],Kf);var qf=()=>E(`Runs`,{id:`col-runs`}),Jf=class extends M{constructor(...e){super(...e),this.hosts=null}static{this.styles=[V,O` :host{display:block;container-type:inline-size;}.g12{align-content:start;}table{width:100%;border-collapse:collapse;font-size:12.5px;}th,td{text-align:start;padding:8px 10px;border-top:1px solid var(--line);vertical-align:baseline;}thead th{border-top:0;font-size:11.5px;font-weight:600;color:var(--text-muted);white-space:nowrap;}tbody th{font-family:var(--mono);font-weight:600;color:var(--text);overflow-wrap:anywhere;}.num{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap;}td.runs{color:var(--text-2);}@container (max-width:640px){thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);}tr{display:block;padding:8px 0;border-top:1px solid var(--line);}tbody tr:first-child{border-top:0;}th,td{display:flex;gap:12px;padding:2px 0;border:0;white-space:normal;}td::before{content:attr(data-label);flex:0 0 9em;color:var(--text-muted);font-family:var(--sans);font-size:11.5px;}}`]}row(e){let t=!e.up;return k`<tr>
|
|
842
|
+
<th scope="row">${e.host_id}</th>
|
|
843
|
+
<td data-label=${E(`Status`)}>${Qr({text:Ls(e),tone:t?`attention`:`done`})}</td>
|
|
844
|
+
<td data-label=${E(`Last report`)} class="num" title=${e.last_seen}>${G(e.last_seen,!0)||`—`}</td>
|
|
845
|
+
<td data-label=${E(`Report interval`)} class="num">${e.interval_s==null?`—`:z(e.interval_s)}</td>
|
|
846
|
+
<td data-label=${qf()} class="runs" ><span>${Bs(e.runs)}${e.running?k` | ${E(T`${e.running} running`)}`:j}${e.unresponsive?k` | <span class="tone-text" data-tone="attention">${n=e.unresponsive,E(T`${n} with no report from host`)}</span>`:j}</span></td >
|
|
847
|
+
</tr>`;var n}render(){let e=this.hosts?.hosts??[],t=this.hosts?.quota??[];return k`<div class="g12">
|
|
848
|
+
<section class="panel c12 enter">
|
|
849
|
+
<h3>${E(`Hosts`)}<span class="r">${Vs(e)}</span></h3>
|
|
850
|
+
${e.length?k`<table>
|
|
851
|
+
<thead><tr>
|
|
852
|
+
<th scope="col">${E(`Host`)}</th><th scope="col">${E(`Status`)}</th><th scope="col">${E(`Last report`)}</th>
|
|
853
|
+
<th scope="col">${E(`Report interval`)}</th><th scope="col">${qf()}</th>
|
|
854
|
+
</tr></thead>
|
|
855
|
+
<tbody>${e.map(e=>this.row(e))}</tbody>
|
|
856
|
+
</table>`:k`<div class="meta">${E(`No hosts`)}</div>`}
|
|
857
|
+
</section>
|
|
858
|
+
${t.length?k`<section class="panel c12 enter">
|
|
859
|
+
<h3 title=${E(`Account-wide | read at each agent session start`)}>
|
|
860
|
+
${E(`Subscription usage`)}<span class="r">${E(`Per account, first → last reading`)}</span></h3>
|
|
861
|
+
<ca-quota .accounts=${t} .rests=${t.flatMap(e=>e.rests??[])} live></ca-quota>
|
|
862
|
+
</section>`:j}
|
|
863
|
+
</div>`}};U([P({attribute:!1})],Jf.prototype,`hosts`,void 0),Jf=U([N(`ca-hosts`),D()],Jf);var Yf=e=>`run-${e}`,Xf=class extends M{constructor(...e){super(...e),this.runs=[],this.current=``,this.open=!1,this.hub=!1,this.hosts=[],this.page=``,this.q=``,this.host=``,this.kb=-1}static{this.styles=[V,O` :host{position:absolute;top:50px;width:min(580px,calc(100cqi - 24px));max-height:min(72vh,660px);display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line2);border-radius:14px;box-shadow:0 24px 70px color-mix(in srgb,var(--shadow) 70%,transparent);opacity:0;transform:translateY(-6px) scale(0.985);pointer-events:none;z-index:40;visibility:hidden;container-type:inline-size;transition:opacity 0.16s var(--ease),transform 0.16s var(--ease),visibility 0s linear 0.16s;}:host([open]){opacity:1;transform:none;pointer-events:auto;visibility:visible;transition-delay:0s;}.search{padding:10px;border-bottom:1px solid var(--line);}input,select{background:var(--well);border:1px solid var(--line);color:var(--text);border-radius:9px;font:inherit;outline:none;}input{width:100%;padding:8px 11px;}input:focus,select:focus{border-color:var(--accent);}.list{overflow:auto;padding:6px;}.group{font-size:11.5px;font-weight:600;color:var(--text-muted);padding:10px 9px 4px;}.group .n{font-weight:400;margin-left:4px;}.keys{margin-top:6px;display:flex;gap:4px;align-items:center;}.item{display:grid;grid-template-columns:12px minmax(0,1fr) auto;gap:3px 10px;align-items:center;padding:7px 9px;border-radius:9px;cursor:pointer;}.item:hover,.item.kb{background:var(--raise);}.item.cur{box-shadow:inset 2px 0 0 var(--accent);background:var(--accent-bg);}.nm{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.when{font-size:11px;color:var(--text-muted);white-space:nowrap;}@container (max-width:480px){.when.page{grid-column:2 / 4;white-space:normal;}}.sub{grid-column:2 / 4;display:flex;gap:7px;flex-wrap:wrap;font-size:11px;color:var(--text-muted);}.row{display:flex;gap:8px;}select{max-width:40%;padding:0 8px;}.host{display:flex;gap:8px;flex-wrap:wrap;color:var(--text-2);border-top:1px solid var(--line);margin-top:6px;}.host b{font-family:var(--mono);color:var(--text);}.host .n{margin-left:auto;}.when[data-tone]{color:var(--tone);font-weight:600;}`]}connectedCallback(){super.connectedCallback(),this.setAttribute(`role`,`dialog`),this.setAttribute(`aria-modal`,`true`)}willUpdate(){this.setAttribute(`aria-label`,E(`Runs`))}updated(e){e.has(`open`)&&this.open&&(this.q=``,this.kb=-1,setTimeout(()=>this.input?.focus(),30))}groups(){let e=this.q.toLowerCase().trim(),t=this.runs.filter(t=>(!e||t.run.toLowerCase().includes(e)||(t.run_group||``).toLowerCase().includes(e))&&(!this.host||t.host_id===this.host));if(this.hub)return se(t,this.hosts).map(({hostId:e,host:t,runs:n})=>{let r=e||zs(``),i=t?(e=>!e.up&&e.last_seen?E(T`no report since ${G(e.last_seen,!0)}`):Ls(e))(t):``,a=Bs(n.length);return[K(r,i,a),k`<b>${r}</b>${t?Qr({text:i,tone:t.up?`done`:`attention`,title:Rs(t)}):j}<span class="n">${a}</span>`,n]});let n=e=>!e.running&&(e=>{let t=Date.parse(e.last_ts||``);return Number.isNaN(t)?1/0:(Date.now()-t)/1e3})(e)>=86400;return[[E(`Running`),t.filter(e=>e.running)],[E(`Last 24 hours`),t.filter(e=>!e.running&&!n(e))],[E(`Older`),t.filter(n)]].map(([e,t])=>[e,k`${e} <span class="n">${t.length}</span>`,t])}pick(e){this.close(),typeof e==`string`?e!==this.page&&Q(this,`ca-navigate`,{page:e,run:``}):(e.run!==this.current||this.page)&&Q(this,`ca-select-run`,{run:e.run})}close(){Q(this,`ca-close`,{})}onDialogKey(e){e.key===`Escape`?this.close():e.key===`Tab`&&(e.preventDefault(),(e.target===this.input&&this.hub?this.select:this.input)?.focus())}onKey(e,t){if(e.key===`ArrowDown`)this.kb=Math.min(t.length-1,this.kb+1);else{if(e.key!==`ArrowUp`){if(e.key===`Enter`){e.preventDefault();let n=t[Math.max(0,this.kb)];n!==void 0&&this.pick(n);return}return}this.kb=Math.max(0,this.kb-1)}e.preventDefault(),this.updateComplete.then(()=>this.renderRoot.querySelector(`.item.kb`)?.scrollIntoView({block:`nearest`}))}render(){let e=this.groups().filter(e=>e[2].length),t=e.flatMap(e=>e[2]),n=this.q.trim()?[]:this.hub?[`trends`,`hosts`]:[`trends`],r=[...n,...t],i=r[this.kb]===void 0?j:Yf(this.kb),a=k`<input placeholder=${E(`Search runs`)} aria-label=${E(`Search runs`)} autocomplete="off" .value=${this.q} role="combobox" aria-expanded=${r.length?`true`:`false`} aria-controls="runs" aria-autocomplete="list" aria-activedescendant=${i} @input=${e=>{this.q=e.target.value,this.kb=0}} @keydown=${e=>this.onKey(e,r)} />`,o=0;return k`<div class="search" @keydown=${e=>this.onDialogKey(e)}>
|
|
864
|
+
${this.hub?k`<div class="row">${a}${this.hostFilter()}</div>`:a}
|
|
865
|
+
<div class="keys meta" aria-hidden="true"><span class="kbd">↑</span><span class="kbd">↓</span> <span class="kbd">Enter</span> <span class="kbd">Esc</span></div>
|
|
866
|
+
</div>
|
|
867
|
+
<div class="list" @mousedown=${e=>e.preventDefault()}>
|
|
868
|
+
${r.length?k`<div id="runs" role="listbox" aria-label=${E(`Runs`)}>
|
|
869
|
+
${n.map(e=>this.item(e,o++))}
|
|
870
|
+
${e.map(([e,t,n])=>k`<div role="group" aria-label=${e}>
|
|
871
|
+
<div class="group${this.hub?` host`:``}" aria-hidden="true">${t}</div>
|
|
872
|
+
${n.map(e=>this.item(e,o++))}
|
|
873
|
+
</div>`)}
|
|
874
|
+
</div>`:k`<div class="blank"><span>${E(`No runs match the search`)}</span></div>`}
|
|
875
|
+
</div>`}hostFilter(){return k`<select aria-label=${E(`Host`)} title=${E(`Host`)} @change=${e=>{this.host=e.target.value,this.kb=-1}}>
|
|
876
|
+
<option value="" ?selected=${!this.host}>${E(`All hosts`)}</option>
|
|
877
|
+
${se(this.runs,this.hosts).map(e=>k`<option value=${e.hostId} ?selected=${e.hostId===this.host}>${e.hostId||zs(``)}</option>`)}
|
|
878
|
+
</select>`}counts(e){let t=e.tasks,n=[E(T`${t.done} of ${t.total} tasks done`)];t.failed&&n.push(X(`failed`,t.failed)),t.not_started&&n.push(X(`not_started`,t.not_started)),t.partial&&n.push(X(`partial`,t.partial)),t.skipped&&n.push(X(`skipped`,t.skipped)),t.running&&n.push(X(`running`,t.running)),t.waiting&&n.push(X(`waiting`,t.waiting)),t.not_run&&n.push(X(`not_run`,t.not_run));let r=(e=>ne(e))(e);r!=null&&n.push(E(T`took ${z(r)}`)),e.cost_usd!==null&&e.cost_usd!==void 0&&n.push(Y(e.cost_usd));let i=ds(e.quota??[]);return i&&n.push(i),K(...n)}when(e){let t=re(e),n=G(e.last_ts,!0),r=t===`unresponsive`;return k`<span class="when" data-tone=${r?`attention`:j} data-mark=${r?`pending`:j} title=${r?K(Rs(ie(this.hosts,e)),E(T`Last activity ${n}`)):n} >${t===`running`?E(`running`):r?Is():Oo(e.last_ts)}</span>`}item(e,t){let n=typeof e==`string`?e:null,r=n?n===this.page:!this.page&&e.run===this.current;return k`<div class=${`item${r?` cur`:``}${t===this.kb?` kb`:``}`} id=${Yf(t)} role="option" aria-selected=${t===this.kb?`true`:`false`} aria-current=${r?n?`page`:`true`:j} @click=${()=>this.pick(e)}>
|
|
879
|
+
${typeof e==`string`?n===`hosts`?k`<span aria-hidden="true">⊞</span><span class="nm">${E(`Hosts`)}</span><span class="when page">${Vs(this.hosts)}</span>`:k`<span aria-hidden="true">▥</span><span class="nm">${ac()}</span><span class="when page">${oc()}</span>`:k`<span class="dot" data-tone=${I(Ro(re(e),e.tasks))} aria-hidden="true"></span><span class="nm" title=${this.hub?e.run:j}>${this.hub?ae(e):e.run}${Fs(e)?k` ${Zr({...Fs(e),tone:`muted`})}`:j}</span>
|
|
880
|
+
${this.when(e)}
|
|
881
|
+
<span class="sub">
|
|
882
|
+
${e.run_group&&e.run_group!==ae(e)?k`<span>${E(T`Run group ${e.run_group}`)}</span>`:j} <span title=${fs(e.quota??[])}>${this.counts(e)}</span>
|
|
883
|
+
</span>`}
|
|
884
|
+
</div>`}};function Zf(e){return e===`system`?E(`System`):e===`high-contrast`?E(`High contrast`):yr[e].label}U([P({attribute:!1})],Xf.prototype,`runs`,void 0),U([P()],Xf.prototype,`current`,void 0),U([P({type:Boolean,reflect:!0})],Xf.prototype,`open`,void 0),U([P({type:Boolean})],Xf.prototype,`hub`,void 0),U([P({attribute:!1})],Xf.prototype,`hosts`,void 0),U([P()],Xf.prototype,`page`,void 0),U([F()],Xf.prototype,`q`,void 0),U([F()],Xf.prototype,`host`,void 0),U([F()],Xf.prototype,`kb`,void 0),U([xn(`input`)],Xf.prototype,`input`,void 0),U([xn(`select`)],Xf.prototype,`select`,void 0),Xf=U([N(`ca-run-picker`),D()],Xf);var Qf=class extends M{constructor(...e){super(...e),this.value=`contraagent-dark`,this.system=`contraagent-dark`,this.open=!1,this.onDocDown=e=>{this.open&&!e.composedPath().includes(this)&&(this.open=!1)}}static{this.styles=[V,O` :host{position:relative;display:inline-flex;}.trig{display:inline-flex;align-items:center;gap:6px;background:none;border:1px solid var(--line);border-radius:999px;padding:2px 10px 2px 7px;font-size:11px;color:var(--text-muted);cursor:pointer;}.trig:hover,.trig[aria-expanded='true']{color:var(--text);border-color:var(--line2);}.trig svg{width:13px;height:13px;}.menu{position:absolute;right:0;top:calc(100% + 8px);min-width:236px;padding:6px;z-index:50;background:var(--panel);border:1px solid var(--line2);border-radius:12px;box-shadow:0 18px 48px color-mix(in srgb,var(--shadow) 65%,transparent);animation:enter 0.16s var(--ease) both;}.grp{font-size:11px;color:var(--text-muted);padding:8px 9px 4px;}[role='separator']{height:1px;background:var(--line);margin:6px 4px;}.item{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;background:none;border:0;border-radius:8px;padding:6px 9px;text-align:left;cursor:pointer;color:var(--text-2);font-size:12px;}.item:hover{background:var(--raise);color:var(--text);}.item:focus-visible{outline-offset:-2px;}.item[aria-checked='true']{background:var(--accent-bg);color:var(--text);font-weight:600;}.item .meta{font-weight:400;}.item .sub{display:block;}.rd{width:12px;height:12px;border-radius:50%;border:1.5px solid var(--line2);display:grid;place-items:center;}[aria-checked='true'] .rd{border-color:var(--accent);}[aria-checked='true'] .rd::after{content:'';width:6px;height:6px;border-radius:50%;background:var(--accent);}.sw{display:inline-flex;gap:2px;align-items:flex-end;width:30px;height:18px;border-radius:5px;border:1px solid;padding:3px 4px;}.sw i{flex:1;height:4px;border-radius:2px;}.sw i:first-child{height:8px;}.sw.split{padding:0;overflow:hidden;gap:0;}.sw.split>span{flex:1;height:100%;display:flex;gap:2px;align-items:flex-end;padding:3px 2px;}`]}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(`pointerdown`,this.onDocDown)}items(){return[...this.renderRoot.querySelectorAll(`.item`)]}updated(e){e.has(`open`)&&(this.open?document.addEventListener(`pointerdown`,this.onDocDown):document.removeEventListener(`pointerdown`,this.onDocDown)),e.has(`open`)&&this.open&&(this.items().find(e=>e.getAttribute(`aria-checked`)===`true`)??this.items()[0])?.focus()}close(e){this.open=!1,e&&this.trig?.focus()}choose(e){this.value=e,Q(this,`ca-choose-theme`,{theme:e}),this.close(!0)}onTrigKey(e){e.key!==`ArrowDown`&&e.key!==`ArrowUp`||(e.preventDefault(),this.open=!0)}onMenuKey(e){let t=this.items(),n=t.indexOf(e.composedPath()[0]),r=e=>t[(e+t.length)%t.length]?.focus();if(e.key===`ArrowDown`)r(n+1);else if(e.key===`ArrowUp`)r(n-1);else if(e.key===`Home`)r(0);else if(e.key===`End`)r(t.length-1);else{if(e.key!==`Escape`)return e.key===`Tab`?void(this.open=!1):void 0;this.close(!0)}e.preventDefault(),e.stopPropagation()}item(e){let t=e===this.value,n=e===`system`?k`<span class="sw split" style="border-color:${yr[`contraagent-dark`].tokens.line2}" ><span style="background:${yr[`contraagent-dark`].tokens.card}"><i style="background:${yr[`contraagent-dark`].tokens.accent}"></i></span ><span style="background:${yr[`contraagent-light`].tokens.card}"><i style="background:${yr[`contraagent-light`].tokens.accent}"></i></span ></span>`:(e=>{let t=yr[e].tokens;return k`<span class="sw" style="background:${t.card};border-color:${t.line2}" ><i style="background:${t.accent}"></i><i style="background:${t[`code-string`]}"></i><i style="background:${t[`code-keyword`]}"></i ></span>`})(e);return k`<button type="button" class="item" role="menuitemradio" aria-checked=${t?`true`:`false`} tabindex="-1" data-theme=${e} @click=${()=>this.choose(e)}>
|
|
885
|
+
${n}<span>${Zf(e)}${e===`system`?k`<span class="meta sub">${yr[this.system].label}</span>`:j}</span><span class="rd" aria-hidden="true"></span>
|
|
886
|
+
</button>`}render(){let e=gr.filter(e=>e===`system`||!_r.includes(e));return k`<button type="button" class="trig" aria-haspopup="menu" aria-expanded=${this.open?`true`:`false`} aria-controls="menu" title=${E(T`Theme: ${Zf(this.value)}`)} @click=${()=>this.open=!this.open} @keydown=${e=>this.onTrigKey(e)}>
|
|
887
|
+
<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="6.25" fill="none" stroke="currentColor" stroke-width="1.5" /><path d="M8 1.75a6.25 6.25 0 0 1 0 12.5z" fill="currentColor" /></svg>
|
|
888
|
+
${E(`Theme`)}
|
|
889
|
+
</button>
|
|
890
|
+
${this.open?k`<div id="menu" class="menu" role="menu" aria-label=${E(`Theme`)} @keydown=${e=>this.onMenuKey(e)}>
|
|
891
|
+
${e.map(e=>this.item(e))}
|
|
892
|
+
<div role="separator"></div>
|
|
893
|
+
<div role="group" aria-labelledby="grp-editor">
|
|
894
|
+
<div class="grp" id="grp-editor">${E(`Editor themes`)}</div>
|
|
895
|
+
${_r.map(e=>this.item(e))}
|
|
896
|
+
</div>
|
|
897
|
+
</div>`:j}`}};U([P()],Qf.prototype,`value`,void 0),U([P()],Qf.prototype,`system`,void 0),U([F()],Qf.prototype,`open`,void 0),U([xn(`.trig`)],Qf.prototype,`trig`,void 0),Qf=U([N(`ca-theme-switch`),D()],Qf);var $f=e=>(e.input??0)+(e.output??0)+(e.cache_read??0)+(e.cache_creation??0);function ep(e,t){if(!e.totals.runs)return[];let n=uc(),r=e.period.days.map(e=>sc(e,t)),i=[],a=function(e){let t=new Map;for(let n of[...e.quota,...e.rests]){let e=n.credential??``;if(!n.account)continue;let r=t.get(e)??new Set;r.add(n.account),t.set(e,r)}return(e,n)=>{let r=e??``,i=ns(r)||r||`—`;return n&&(t.get(r)?.size??0)>1?`${i} | ${ss(n)}`:i}}(e),o=e.totals,s=e.daily.filter(e=>Object.keys(e.cost_usd).length).length;var c,l;i.push({id:`totals`,wide:!0,body:{type:`tiles`,collapsed:!1,tiles:[{id:`runs`,label:n.runs,value:String(o.runs),sub:[]},{id:`attempts`,label:n.attempts,value:String(o.attempts),sub:[[(l=o.attempts?`${Math.round(o.ok/o.attempts*100)}%`:`—`,E(T`Done ${l}`)),...o.partial?[X(`partial`,o.partial)]:[]]]},{id:`cost`,label:n.cost,value:o.cost_usd==null?`—`:Y(o.cost_usd),sub:s&&o.cost_usd!=null?[[(c=Y(o.cost_usd/s),E(T`${c} a day`))]]:[]},{id:`tokens`,label:n.tokens,value:J($f(o.tokens)),sub:[[`${n.input} ${J(o.tokens.input)} | ${n.output} ${J(o.tokens.output)}`]]},{id:`time`,label:n.time,value:z(o.wall_s),sub:[]}]}});let u=[...new Set(e.daily.flatMap(e=>Object.keys(e.cost_usd)))].map(t=>({s:t,total:e.daily.reduce((e,n)=>e+(n.cost_usd[t]??0),0)})).sort((e,t)=>t.total-e.total).map(e=>e.s);i.push({id:`cost-by-day`,wide:!0,body:{type:`columns`,collapsed:!1,title:n.costByDay,x:r,unit:`usd`,stacked:!0,series:u.map(t=>({name:t,values:e.daily.map(e=>e.cost_usd[t]??null)}))}});let d=(t,r,i,a)=>({id:t,wide:!0,body:{type:`table`,collapsed:a,title:r,columns:[{id:`kind`,label:n.kind},...e.kinds.some(e=>e.group&&e.group!==e.kind)?[{id:`group`,label:n.group}]:[],{id:`tasks`,label:n.tasks,align:`end`,format:`number`},{id:`passed`,label:n.tasksDone,align:`end`,format:`pct`},...i.some(e=>e.tasks_partial)?[{id:`partial`,label:n.partial,align:`end`,format:`number`}]:[],{id:`attempts`,label:n.attempts,align:`end`,format:`number`},{id:`median`,label:n.medianTime,align:`end`,format:`duration`},{id:`wall`,label:n.totalTime,align:`end`,format:`duration`},{id:`tokens`,label:n.tokens,align:`end`,format:`tokens`},{id:`cost`,label:n.cost,align:`end`,format:`usd`,bar:!0}],rows:[...i].sort((e,t)=>(t.cost_usd??0)-(e.cost_usd??0)||t.attempts-e.attempts).map(e=>({kind:e.kind,group:e.group,tasks:e.tasks,passed:e.tasks?e.tasks_ok/e.tasks:null,partial:e.tasks_partial??0,attempts:e.attempts,median:e.wall_s_median,wall:e.wall_s,tokens:$f(e.tokens),cost:e.cost_usd,...e.tasks_ok<e.tasks?{_tone:`attention`}:{}}))}}),f=e.kinds.filter(e=>e.executor!==`python`),p=e.kinds.filter(e=>e.executor===`python`);f.length&&i.push(d(`kinds`,n.kinds,f,!1)),p.length&&i.push(d(`python-kinds`,dc(n.pythonKinds,p.length),p,f.length>0)),e.models.length&&i.push({id:`models`,wide:!0,body:{type:`table`,collapsed:!1,title:n.models,columns:[{id:`model`,label:n.model},{id:`sessions`,label:n.sessions,align:`end`,format:`number`},{id:`calls`,label:n.calls,align:`end`,format:`number`},{id:`input`,label:n.input,align:`end`,format:`tokens`},{id:`output`,label:n.output,align:`end`,format:`tokens`},{id:`cache_read`,label:n.cacheRead,align:`end`,format:`tokens`},{id:`cache_write`,label:n.cacheWrite,align:`end`,format:`tokens`},{id:`cost`,label:n.cost,align:`end`,format:`usd`,bar:!0},{id:`wall`,label:n.time,align:`end`,format:`duration`},...e.models.some(e=>e.peak_context!=null)?[{id:`peak`,label:gc(),align:`end`,format:`tokens`,tip:_c()}]:[]],rows:e.models.map(e=>{return{model:(t=e.agent,n=e.model,t?`${n||`—`} | ${t}`:n||`—`),sessions:e.sessions,calls:e.calls,input:e.input,output:e.output,cache_read:e.cache_read,cache_write:e.cache_creation,cost:e.cost_usd,wall:e.wall_s,peak:e.peak_context??null};var t,n})}}),e.quota.length&&i.push({id:`usage`,wide:!0,body:{type:`lines`,collapsed:!1,title:n.usage,x:r,unit:`pct`,series:e.quota.map(e=>({name:pc(a(e.credential,e.account),os(e.window)),values:e.daily_peak.map(e=>e==null?null:e/100)}))}});let m=e.stops.filter(e=>e.stop!==`completed`&&e.stop!==`skipped`);return m.length&&i.push({id:`outcomes`,body:{type:`table`,collapsed:!1,title:n.outcomes,columns:[{id:`outcome`,label:n.outcome},{id:`attempts`,label:n.attempts,align:`end`,format:`number`,bar:!0},{id:`kinds`,label:n.kinds}],rows:m.map(e=>({outcome:Z(e.stop),attempts:e.attempts,kinds:Object.entries(e.kinds).sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${e} ${t}`).join(` | `),_tone:`failed`}))}}),e.denials.length&&i.push({id:`denials`,body:{type:`table`,collapsed:!1,title:n.denials,columns:[{id:`tool`,label:n.tool},{id:`count`,label:n.toolCalls,align:`end`,format:`number`,bar:!0},{id:`kinds`,label:n.kinds}],rows:e.denials.map(e=>({tool:e.tool,count:e.count,kinds:Object.entries(e.kinds).map(([e,t])=>`${e} ${t}`).join(` | `)}))}}),e.deferred.length&&i.push({id:`deferred`,body:{type:`table`,collapsed:e.deferred.length>20,title:dc(n.deferred,e.deferred.length),columns:[{id:`when`,label:n.when,format:`datetime`},{id:`task`,label:n.task},{id:`cause`,label:n.cause},{id:`run`,label:n.run}],rows:[...e.deferred].sort((e,t)=>t.ts.localeCompare(e.ts)).map(e=>({when:e.ts,task:e.key,cause:e.cause===`rest`?fc(e.reason):ys({cause:e.cause},e.reason),run:e.run,_tone:`attention`}))}}),e.rests.length&&i.push({id:`rests`,body:{type:`table`,collapsed:!1,title:n.rests,columns:[{id:`when`,label:n.when,format:`datetime`},{id:`identity`,label:n.identity},{id:`event`,label:n.event},{id:`run`,label:n.run}],rows:[...e.rests].sort((e,t)=>(t.ts??``).localeCompare(e.ts??``)).map(e=>{return{when:e.ts,identity:a(e.credential,e.account),event:(t=e.event,t===`end`?E(`ended`):t===`start`?E(`started`):t||`—`),run:e.run};var t})}}),e.starts.counts.some(e=>e.some(e=>e>0))&&i.push({id:`starts`,wide:!0,body:{type:`heatmap`,collapsed:!1,title:n.starts,x:e.starts.hours.map(e=>String(e).padStart(2,`0`)),y:lc(t),values:e.starts.counts.map(e=>e.map(e=>e||null)),unit:`number`}}),i.push({id:`runs`,wide:!0,body:{type:`table`,collapsed:!1,title:n.runs,columns:[{id:`run`,label:n.run},{id:`started`,label:n.started,format:`datetime`},{id:`attempts`,label:n.attempts,align:`end`,format:`number`},{id:`passed`,label:n.done,align:`end`,format:`pct`},...e.runs.some(e=>e.partial)?[{id:`partial`,label:n.partial,align:`end`,format:`number`}]:[],{id:`cost`,label:n.cost,align:`end`,format:`usd`,bar:!0},{id:`wall`,label:n.time,align:`end`,format:`duration`}],rows:e.runs.map(e=>({run:e.run,started:e.started_at||null,attempts:e.attempts,passed:e.attempts?e.ok/e.attempts:null,partial:e.partial??0,cost:e.cost_usd,wall:e.wall_s,...e.ok<e.attempts?{_tone:`attention`}:{}}))}}),i}var tp=()=>Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`;function np(e,t){let n=new Date(`${e}T00:00:00Z`);return n.setUTCDate(n.getUTCDate()-t),n.toISOString().slice(0,10)}function rp(e,t=new Date){let n=e.tz||tp();return{...e.days===0&&e.from&&e.to?{from:e.from,to:e.to}:(()=>{let r=function(e,t=new Date){try{return new Intl.DateTimeFormat(`en-CA`,{timeZone:e,year:`numeric`,month:`2-digit`,day:`2-digit`}).format(t)}catch{return t.toISOString().slice(0,10)}}(n,t);return{from:np(r,Math.max(1,e.days)-1),to:r}})(),tz:n,...e.group?{run_group:e.group}:{}}}var ip=e=>[``,...new Set(e.filter(e=>e.scope===`trends`&&e.tab).map(e=>e.tab))],ap=class extends M{constructor(...e){super(...e),this.view=null,this.days=14,this.from=``,this.to=``,this.tz=``,this.group=``,this.groups=[],this.panels=[],this.exported=!1,this.tab=``,this.tabFocus=new mi(this,{items:()=>[...this.renderRoot.querySelectorAll(`[role="tab"]`)],layout:`horizontal`,wrap:!0})}static{this.styles=[V,O` :host{display:block;}.controls{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;margin-bottom:14px;}.controls label{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text-muted);}input,select{background:var(--well);border:1px solid var(--line);color:var(--text);border-radius:8px;font:inherit;font-size:12px;padding:4px 8px;}input:focus-visible,select:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:1px;}.period{font-size:12px;color:var(--text-2);}.loading{font-size:12px;color:var(--text-muted);}.err{font-size:12px;color:var(--status-failed);}.wide{margin-bottom:14px;}.pairs{columns:2 440px;column-gap:14px;margin-bottom:14px;}.pairs>.panel{break-inside:avoid;margin-bottom:14px;}.panel{display:block;}.tabs{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1px solid var(--line);margin-bottom:14px;}.tab{background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;padding:8px 14px 9px;color:var(--text-muted);font:inherit;font-weight:500;cursor:pointer;white-space:nowrap;}.tab:hover{color:var(--text-2);}.tab[aria-selected='true']{color:var(--text);font-weight:600;border-bottom-color:var(--accent);}.tab:focus-visible{outline:var(--focus-width) solid var(--focus);outline-offset:-2px;}`]}go(e){Q(this,`ca-navigate`,e)}render(){let e=this.view,t=this.panels.filter(e=>e.scope===`trends`),n=ip(t),r=n.includes(this.tab)?this.tab:``,i=t.filter(e=>(e.tab??``)===r),a=r?this.trendPanels(i,e?.panels??{},!1):this.trends(i);return k`<h2 class="sr">${ac()}</h2>
|
|
898
|
+
${this.controls()}
|
|
899
|
+
${e?.error?k`<p class="err" role="alert">${E(`No answer from the monitor`)} | ${e.error.message}</p>`:j}
|
|
900
|
+
${n.length>1?k`${this.tabList(n,r)}<div role="tabpanel" id="trends-tabpanel" aria-labelledby=${`trends-tab-${n.indexOf(r)}`}>${a}</div>`:a}`}tabList(e,t){return k`<div class="tabs" role="tablist" aria-label=${ac()}>
|
|
901
|
+
${e.map((e,n)=>k`<button type="button" role="tab" class="tab" id=${`trends-tab-${n}`} aria-selected=${e===t?`true`:`false`} aria-controls="trends-tabpanel" @click=${()=>e!==t&&Q(this,`ca-navigate`,{trendsTab:e})}>${e||E(`Summary`)}</button>`)}
|
|
902
|
+
</div>`}updated(){let e=ip(this.panels);this.tabFocus.set(Math.max(0,e.indexOf(this.tab)))}trends(e){let t=this.view,n=t?.data??null,r=n?ep(n,jn()):[],i=r.filter(e=>e.wide),a=r.filter(e=>!e.wide),o=[`totals`,`cost-by-day`,`kinds`,`python-kinds`,`models`,`usage`],s=i.filter(e=>o.includes(e.id)),c=i.filter(e=>!o.includes(e.id)),l=(e,t)=>k`<section class="panel" data-section=${t}><ca-panel-body .body=${e}></ca-panel-body></section>`;return k`${!n&&t?.loading?k`<p class="loading">${E(`Loading…`)}</p>`:j}
|
|
903
|
+
${n&&!r.length?k`<div class="blank small"><span>${E(`No runs in this period`)}</span></div>`:j}
|
|
904
|
+
${H(s,e=>e.id,e=>k`<div class="wide">${l(e.body,e.id)}</div>`)}
|
|
905
|
+
${a.length?k`<div class="pairs">${H(a,e=>e.id,e=>l(e.body,e.id))}</div>`:j}
|
|
906
|
+
${H(c,e=>e.id,e=>k`<div class="wide">${l(e.body,e.id)}</div>`)}
|
|
907
|
+
${this.trendPanels(e,t?.panels??{},!0)}`}controls(){let e=this.view?.data,t=e?k`<span class="period">${function(e,t,n,r=jn()){let i=t.slice(0,4);return E(T`${sc(e,r)} to ${sc(t,r)}, ${i} | ${n}`)}(e.period.from,e.period.to,e.period.tz)}</span>`:j;if(this.exported)return k`<div class="controls"><span class="meta">${E(`Period of this export`)}</span>${t}</div>`;let n=this.days?String(this.days):`dates`,r=e?.period.to||new Date().toISOString().slice(0,10),i=[...new Set([this.tz,Intl.DateTimeFormat().resolvedOptions().timeZone,`UTC`].filter(Boolean))];return k`<div class="controls">
|
|
908
|
+
<cae-segmented label=${E(`Period`)} .value=${n} .options=${[...rr.map(e=>({value:String(e),label:cc(e)})),{value:`dates`,label:E(`Dates`)}]} @cae-change=${e=>e.detail.value===`dates`?this.go({days:0,from:this.from||np(r,(this.days||14)-1),to:this.to||r}):this.go({days:Number(e.detail.value),from:``,to:``})}></cae-segmented>
|
|
909
|
+
${this.days===0?k`<label>${E(`From`)} <input type="date" .value=${this.from} max=${this.to||j} @change=${e=>this.go({days:0,from:e.target.value,to:this.to})} /></label>
|
|
910
|
+
<label>${E(`To`)} <input type="date" .value=${this.to} min=${this.from||j} @change=${e=>this.go({days:0,from:this.from,to:e.target.value})} /></label>`:j}
|
|
911
|
+
<label>${E(`Time zone`)}
|
|
912
|
+
<select @change=${e=>this.go({tz:e.target.value})}>
|
|
913
|
+
${i.map(e=>k`<option value=${e} ?selected=${e===(this.tz||i[0])}>${e}</option>`)}
|
|
914
|
+
</select></label>
|
|
915
|
+
${this.groups.length>1?k`<label>${E(`Run group`)}
|
|
916
|
+
<select @change=${e=>this.go({group:e.target.value})}>
|
|
917
|
+
<option value="" ?selected=${!this.group}>${E(`All run groups`)}</option>
|
|
918
|
+
${this.groups.map(e=>k`<option value=${e} ?selected=${e===this.group}>${e}</option>`)}
|
|
919
|
+
</select></label>`:j}
|
|
920
|
+
${t}
|
|
921
|
+
${this.view?.loading&&e?k`<span class="loading" aria-live="polite">${E(`Loading…`)}</span>`:j}
|
|
922
|
+
</div>`}trendPanels(e,t,n){return e.length?k`${n?k`<h3 class="sect-h">${uc().trendPanels}</h3>`:j}
|
|
923
|
+
${e.map(e=>k`<section class="panel wide" data-panel=${e.name}>
|
|
924
|
+
<h3>${e.icon} ${e.title||e.name}${e.description?k`<span class="r">${e.description}</span>`:j}</h3>
|
|
925
|
+
${t[e.name]?k`<ca-panel-body .body=${t[e.name]}></ca-panel-body>`:k`<p class="loading">${E(`Loading…`)}</p>`}
|
|
926
|
+
</section>`)}`:j}};U([P({attribute:!1})],ap.prototype,`view`,void 0),U([P({type:Number})],ap.prototype,`days`,void 0),U([P()],ap.prototype,`from`,void 0),U([P()],ap.prototype,`to`,void 0),U([P()],ap.prototype,`tz`,void 0),U([P()],ap.prototype,`group`,void 0),U([P({attribute:!1})],ap.prototype,`groups`,void 0),U([P({attribute:!1})],ap.prototype,`panels`,void 0),U([P({type:Boolean})],ap.prototype,`exported`,void 0),U([P()],ap.prototype,`tab`,void 0),ap=U([N(`ca-trends`),D()],ap);var $=class extends M{static{this.styles=[Or,V,Fc,jc]}constructor(){super(),this.baseUrl=``,this.exportUrl=``,this.history=`url`,this.shortcuts=``,this.run=``,this.locale=``,this.theme=``,this.live=!1,this.pickerOpen=!1,this.qDraft=null,this.themes=new Ar(this,{theme:()=>this.theme,pageWide:()=>this.history===`url`}),this.tabFocus=new mi(this,{items:()=>[...this.renderRoot.querySelectorAll(`[role="tablist"] [role="tab"]`)],layout:`horizontal`,wrap:!0}),this.storeBase=``,this.viewRouterMode=`url`,this.storeCleanups=[],this.mainScroll=new er(`main`,()=>Xn(this)),this.pendingScroll=null,this.qTimer=null,this.cleanups=[],this.localMemory=new qn,this.onOutsideClick=e=>{e.composedPath().some(e=>e instanceof HTMLElement&&(e.localName===`ca-run-picker`||e.classList.contains(`runbtn`)))||(this.pickerOpen=!1)},this.outsideClickOn=!1,this.navObserver=null,this.navObserved=null,this.locales=!1,this.language=new fr(this,{locale:()=>this.locale,pageWide:()=>this.history===`url`}),new pr(this,e=>this.onKey(e),()=>this.shortcutScope)}async scheduleUpdate(){return await this.language.ready,super.scheduleUpdate()}connectedCallback(){this.locales=An(),function(e=document){if(kr.has(e))return;let t=Dr.styleSheet;t&&`adoptedStyleSheets`in e&&(e.adoptedStyleSheets=[...e.adoptedStyleSheets,t],kr.add(e))}(this.ownerDocument),super.connectedCallback(),this.openStore(),this.openViewRouter(),this.store.start(),this.cleanups.push(()=>{this.listenOutside(!1),this.navObserver?.disconnect(),this.navObserver=null,this.navObserved=null}),this.addEventListener(`ca-open-task`,e=>{this.navigate({tab:`stream`,key:e.detail.key,...e.detail.view?{view:e.detail.view}:{}})}),this.addEventListener(`ca-navigate`,e=>{let{replace:t,...n}=e.detail;this.navigate(n,{replace:!0===t})}),this.addEventListener(`ca-select-run`,e=>this.navigate({run:e.detail.run,page:``})),this.addEventListener(`ca-filter`,e=>this.navigate(e.detail)),this.addEventListener(`ca-choose-theme`,e=>{this.theme=e.detail.theme,function(e,t=Er()){try{t?.setItem(Tr,e)}catch{}}(e.detail.theme)})}get source(){return this.exportUrl?`export:${this.exportUrl}`:this.baseUrl}openStore(){if(this.storeBase=this.source,this.exportUrl){let e=function(e,t={}){let n=e.endsWith(`/`)?e:`${e}/`,r=t.fetch??globalThis.fetch,a=new Map;function o(e){let t=a.get(e);return t||(t=async function(e){let t;try{t=await r(new Request(e))}catch{throw new i(e,`network`)}let n=(t.headers.get(`Content-Type`)??``).split(`;`)[0].trim().toLowerCase();if(!t.ok)throw new i(e,`status`,t.status,n);try{return await t.json()}catch{throw new i(e,`not-json`,t.status,n)}}(n+e),t.catch(()=>a.delete(e)),a.set(e,t)),t}let s=(e,t)=>`runs/${be(e)}/${t}`,c=e=>Promise.reject(new i(n+e,`status`,404));return{baseUrl:n.replace(/\/$/,``),file:o,info:()=>o(`info.json`),runs:()=>o(`runs.json`),hosts:()=>c(`hosts.json`),async journal(e,t=0){let n=await o(s(e,`journal.json`));return t>0?{entries:n.entries.slice(t),total:n.total}:n},definitions:e=>o(s(e,`definitions.json`)),async task(e,t){let[n,r,i,a]=await Promise.all([o(s(e,`tasks/${be(xe(t))}.json`)),o(s(e,`journal.json`)),o(s(e,`definitions.json`)),o(s(e,`plan.json`))]),c=r.entries.filter(e=>e.key===t),l=c.at(-1)?.kind??a.nodes.find(e=>e.key===t)?.kind;return{...n,rows:c,definition:i.find(e=>e.kind===l)??null}},stream:(e,t)=>c(s(e,`streams/${be(xe(t))}.json`)),panel:(e,t)=>o(s(e,`panels/${be(t)}.json`)),trends:()=>o(`trends.json`),trendsPanel:e=>o(`trends/panels/${be(e)}.json`)}}(new URL(this.exportUrl,this.ownerDocument.baseURI).href);this.store=new ye({client:e,openRunFeed:Ce(e),runsEveryMs:0})}else this.store=new ye({baseUrl:this.baseUrl});this.show(this.store.snapshot),this.storeCleanups.push(this.store.subscribe(e=>{this.show(e),this.pickDefaultRun()}),this.store.onNewRow(e=>this.toasts?.show(...Oc(e,this.snap.run))))}closeStore(){for(let e of this.storeCleanups.splice(0))e();this.store.stop()}openViewRouter(){this.viewRouterMode=this.history,Yn(this,this.history===`memory`?this.localMemory:null);let e=this.viewRoute?this.history===`memory`?this.viewRoute:{}:this.run?{run:this.run}:{};this.viewRouter=new dr(this.history,(e,t)=>this.onViewRoute(e,t),e,Gn),this.viewRouter.start()}willUpdate(e){this.isConnected&&this.store&&(this.source!==this.storeBase&&(this.closeStore(),this.openStore(),this.navigate({run:this.run},{replace:!0}),this.store.selectRun(this.viewRoute.run),this.store.start()),this.history!==this.viewRouterMode&&(this.viewRouter.stop(),this.openViewRouter()),e.has(`run`)&&e.get(`run`)!==void 0&&this.run&&this.navigate({run:this.run}))}show(e){e.error&&e.error!==this.snap?.error&&console.error(Dc(e.error)),this.snap=e,this.live=fe(e.state,de(e.runs,e.run))}get shortcutScope(){return(e=>e===`page`||e===`element`||e===`off`)(this.shortcuts)?this.shortcuts:this.history===`url`?`page`:`element`}listenOutside(e){e!==this.outsideClickOn&&(this.outsideClickOn=e,e?document.addEventListener(`click`,this.onOutsideClick):document.removeEventListener(`click`,this.onOutsideClick))}get shownTheme(){return this.themes.shown}disconnectedCallback(){super.disconnectedCallback();for(let e of this.cleanups.splice(0))e();Yn(this,null),this.viewRouter.stop(),this.closeStore(),this.mainScroll.detach()}navigate(e,t={}){this.viewRouter.navigate(e,t)}onViewRoute(e,t){let n=this.viewRoute;this.viewRoute=e,t!==`replace`&&(this.qDraft=null),this.store.selectRun(e.run);let r=n?.page===`trends`&&JSON.stringify(rp(n))===JSON.stringify(rp(e));e.page===`trends`?r||this.store.loadTrends(rp(e)):this.store.closeTrends(),this.pickDefaultRun(),t!==`replace`&&(this.pendingScroll=t)}pickDefaultRun(){let{info:e,runs:t}=this.snap;if(this.viewRoute.page===`trends`)return;if(this.viewRoute.page===`hosts`){if(!e.api_version||e.hosts)return;this.navigate({page:``},{replace:!0})}let n=t[0];!this.viewRoute.run&&n&&this.navigate({run:n.run},{replace:!0})}onKey(e){if(e.key===`r`)e.preventDefault(),this.pickerOpen=!0;else if(e.key===`/`)e.preventDefault(),this.renderRoot.querySelector(`.bar input`)?.focus();else if(/^[1-9]$/.test(e.key)&&!this.viewRoute.page){let t=Mc(this.snap.info.panels)[Number(e.key)-1];t&&this.navigate({tab:t.id})}}selectedTab(){return Mc(this.snap.info.panels).findIndex(e=>e.id===this.viewRoute.tab)}closePicker(){let e=this.picker?.matches(`:focus-within`);this.pickerOpen=!1,e&&this.runBtn?.focus()}updated(){this.history===`url`&&this.snap&&(document.title=E(T`${this.snap.info.title} monitor`)),this.listenOutside(this.isConnected&&this.pickerOpen),this.observeNav(),this.snap&&this.viewRoute&&this.tabFocus.set(Math.max(0,this.selectedTab())),Pc(this.renderRoot),this.main&&this.mainScroll.attach(this.main),this.pendingScroll&&=(this.pendingScroll===`push`?this.mainScroll.reset():this.mainScroll.restore(),null)}observeNav(){let e=this.renderRoot.querySelector(`nav`);e&&typeof ResizeObserver<`u`&&this.navObserved!==e&&(this.navObserver?this.navObserver.disconnect():this.navObserver=new ResizeObserver(()=>Pc(this.renderRoot)),this.navObserver.observe(e),this.navObserved=e)}setQ(e){this.qDraft=e,this.qTimer&&clearTimeout(this.qTimer),this.qTimer=setTimeout(()=>{this.qTimer=null,this.navigate({q:e})},250)}pickLocale(e){this.locale=e,In(e)}render(){if(!this.snap||!this.viewRoute)return j;let{snap:e,viewRoute:t}=this,n=pe(e.state.procs),r=S(e.state.journal,e.state.plan),i=this.selectedTab(),a=this.shortcutScope!==`off`,o=!!e.info.hosts,s=t.page===`hosts`,c=t.page===`trends`;return k`
|
|
927
|
+
<header>
|
|
928
|
+
${u=e.info.title,k`<div class="brand">
|
|
929
|
+
<svg viewBox="12 12 96 96" aria-hidden="true">
|
|
930
|
+
<defs>
|
|
931
|
+
<linearGradient id="brand-spark" x1="0" y1="0" x2="1" y2="1">
|
|
932
|
+
<stop offset="0" class="spark-a" />
|
|
933
|
+
<stop offset="1" class="spark-b" />
|
|
934
|
+
</linearGradient>
|
|
935
|
+
</defs>
|
|
936
|
+
<g class="logo-braces" fill="none" stroke-width="14" stroke-linecap="round" stroke-linejoin="round">
|
|
937
|
+
<path d="M48 22 C36 22 36 30 36 38 L36 50 C36 56 32 60 26 60 C32 60 36 64 36 70 L36 82 C36 90 36 98 48 98" />
|
|
938
|
+
<path d="M72 22 C84 22 84 30 84 38 L84 50 C84 56 88 60 94 60 C88 60 84 64 84 70 L84 82 C84 90 84 98 72 98" />
|
|
939
|
+
</g>
|
|
940
|
+
<g class="logo-spark">
|
|
941
|
+
<path d="M60 45 C61.6 56 64 58.4 75 60 C64 61.6 61.6 64 60 75 C58.4 64 56 61.6 45 60 C56 58.4 58.4 56 60 45 Z" fill="url(#brand-spark)" transform="translate(60 60) scale(1.15) translate(-60 -60)" />
|
|
942
|
+
</g>
|
|
943
|
+
</svg>
|
|
944
|
+
<span title=${u}>${u}</span>
|
|
945
|
+
</div>`}
|
|
946
|
+
<button type="button" class="runbtn" title=${E(a?`Switch run (r)`:`Switch run`)} aria-haspopup="dialog" aria-expanded=${this.pickerOpen?`true`:`false`} @click=${()=>this.pickerOpen=!this.pickerOpen}>
|
|
947
|
+
${s?this.hostsLabel():c?this.trendsLabel():this.runLabel(o,r)}
|
|
948
|
+
<span class="chev" aria-hidden="true">▾</span>
|
|
949
|
+
</button>
|
|
950
|
+
<div class="hdr-right">
|
|
951
|
+
${((e,t)=>k`<span class="nowline">${t.length?E(k`Running ${t.slice(0,3).map(t=>Ic(e,q(t),{key:t.key}))}${t.length>3?k` <span>+${t.length-3}</span>`:j}`):j}</span>`)(this,n)}
|
|
952
|
+
<ca-theme-switch .value=${this.themes.choice} .system=${this.themes.system}></ca-theme-switch>
|
|
953
|
+
${this.locales?k`<cae-segmented class="langs" label=${E(`Language`)} .value=${jn()} .options=${Dn.map(e=>({value:e,label:On[e],lang:e}))} @cae-change=${e=>Pn(e.detail.value)&&this.pickLocale(e.detail.value)}></cae-segmented>`:j}
|
|
954
|
+
${e.info.export?Zr({text:tc(e.info.export),tone:`muted`,title:rc(e.info.export)}):(e=>{let t=E(e?`Connected to the monitor server`:`Not connected to the monitor server`);return k`<span role="img" aria-label=${t} title=${t}><span class="live-dot ${e?``:`off`}"></span></span>`})(e.connected)}
|
|
955
|
+
<ca-clock class="clock"></ca-clock>
|
|
956
|
+
</div>
|
|
957
|
+
<ca-run-picker .runs=${e.runs} current=${t.run} ?open=${this.pickerOpen} ?hub=${o} .hosts=${e.hosts?.hosts??[]} page=${t.page} @ca-close=${()=>this.closePicker()}></ca-run-picker>
|
|
958
|
+
</header>
|
|
959
|
+
${s?k`${this.renderApiError()}<main id="main"><ca-hosts .hosts=${e.hosts}></ca-hosts></main>`:c?k`${this.renderApiError()}<main id="main"><ca-trends .view=${e.trends} days=${t.days} from=${t.from} to=${t.to} tz=${t.tz||tp()} group=${t.group} .groups=${l=e.runs,[...new Set(l.map(e=>e.run_group).filter(e=>!!e))]} .panels=${e.info.panels} tab=${t.trendsTab} ?exported=${!!e.info.export}></ca-trends></main>`:k`${this.renderTabs(r,n.length)} ${this.renderBar(r)} ${this.renderApiError()}
|
|
960
|
+
<main id="main" class=${t.tab===`stream`?`stream`:``} role="tabpanel" aria-labelledby=${i>=0?Nc(i):j} >${function({snap:e,viewRoute:t,derived:n,q:r,client:i,baseUrl:a}){let{state:o}=e;if(!t.run)return k`<div class="blank">${e.runsLoaded&&!e.error?k`<span class="ic" aria-hidden="true">✦</span><b>${E(`No runs yet`,{id:`no-runs-yet`})}</b>`:j}</div>`;let s=de(e.runs,e.run),c=fe(o,s);switch(t.tab){case`overview`:return k`<ca-overview .state=${o} .summary=${s} .host=${ie(e.hosts?.hosts,s)} .info=${e.info} .run=${t.run} .layer=${t.layer} .unit=${t.unit} .sel=${t.sel}></ca-overview>`;case`tasks`:return k`<ca-task-table .run=${t.run} .journal=${o.journal} .plan=${o.plan} .kind=${t.kind} .q=${r} ?live=${c}></ca-task-table>`;case`journal`:return k`<ca-journal-table .run=${t.run} .rows=${o.journal} .plan=${o.plan} .fresh=${e.fresh} .kind=${t.kind} .stop=${t.stop} .q=${r} .extras=${s?.row_extras??[]} ?replay-marks=${Ms(s)}></ca-journal-table>`;case`outputs`:return k`<ca-contracts .run=${t.run} .outputs=${o.outputs} .journal=${o.journal} .plan=${o.plan}></ca-contracts>`;case`definitions`:return k`<ca-definitions .client=${i} .run=${t.run} .journal=${o.journal} .plan=${o.plan} .live=${c} .selected=${t.def}></ca-definitions>`;case`procs`:return k`<ca-procs-view .procs=${o.procs} ?unresponsive=${re(s,!!o.procs?.alive)===`unresponsive`} ?exported=${!!e.info.export}></ca-procs-view>`;case`stream`:return k`<ca-task-view .client=${i} .journal=${o.journal} .plan=${o.plan} base-url=${a} .run=${t.run} .taskKey=${t.key??function(e){let t=e.filter(e=>e.executor!==`python`),n=t.find(e=>e.outcome===`running`);if(n)return n.key;let r=e=>e.tries[e.tries.length-1]?.ts??``;return t.filter(r).sort((e,t)=>r(t).localeCompare(r(e)))[0]?.key??null}(n.rows)} .view=${t.view} .round=${t.round} .live=${c} ?exported=${!!e.info.export} ?replay-marks=${Ms(s)}></ca-task-view>`;default:{let n=t.tab.slice(6);return k`<ca-panel-view .name=${n} .panel=${e.info.panels.find(e=>e.name===n)} .data=${o.panels[n]}></ca-panel-view>`}}}({snap:e,viewRoute:t,derived:r,q:this.qDraft??t.q,client:this.store.client,baseUrl:this.store.client.baseUrl})}</main>`}
|
|
961
|
+
<ca-toasts></ca-toasts>
|
|
962
|
+
`;var l,u}runLabel(e,t){let{snap:n,viewRoute:r}=this,i=de(n.runs,n.run),a=re(i,!!n.state.procs?.alive),o=Ro(a,i?.tasks),s=e?i?.host_id??``:``;return k`<span class="dot" data-tone=${I(o)} aria-hidden="true"></span>
|
|
963
|
+
<span class="rn" title=${s?r.run:j}>${i&&s?ae(i):r.run||`—`}</span>
|
|
964
|
+
${s?k`<span class="hostchip" title=${zs(s)}><span class="sr">${zs(s)}</span><span aria-hidden="true">${s}</span></span>`:j}
|
|
965
|
+
${a===`unresponsive`?Zr({text:Is(),tone:`attention`,title:Rs(ie(n.hosts?.hosts,i))}):j}
|
|
966
|
+
${Fs(i)?Zr({...Fs(i),tone:`muted`}):j}
|
|
967
|
+
<span class="rs" title=${i?fs(As(n.state,i)):``}>${i?function(e,t,n=S(e.journal,e.plan)){let r=ne(t),i=e.ready?De(e.journal)?.cost:t.cost_usd,a=i==null?``:Y(i),o=ds(As(e,t)),s=K(r==null?``:E(T`took ${z(r)}`),a,o,t.running?E(`running`):``);if(!e.ready)return s;let c=n.counts,l=t.tasks.not_run?X(`not_run`,t.tasks.not_run):``;return K(E(T`${c.doneTotal} of ${c.total} tasks done`),l,s)}(n.state,i,t):``}</span>`}trendsLabel(){return k`<span class="dot" data-tone="neutral" aria-hidden="true"></span><span class="rn">${ac()}</span><span class="rs">${oc()}</span>`}hostsLabel(){let e=this.snap.hosts?.hosts??[];return k`<span class="dot" data-tone=${I(e.some(e=>!e.up)?`attention`:`neutral`)} aria-hidden="true"></span>
|
|
968
|
+
<span class="rn">${E(`Hosts`)}</span><span class="rs">${Vs(e)}</span>`}renderApiError(){let{error:e}=this.snap;return k`<p class="api-error" role="alert">${e?k`<span class="ic" aria-hidden="true">✕</span> ${Dc(e)}`:j}</p>`}renderTabs(e,t){let{state:n}=this.snap,{tries:r}=e.tries,i=e.counts;return function(e,t,n,r,i,a=!0){return k`<nav data-scroll="x">
|
|
969
|
+
<div class="tabs" role="tablist" aria-label=${E(`Views`)}>
|
|
970
|
+
${e.map((a,o)=>{let s=n(a.id),c=a.id===t;return k`${a.panel&&!e[o-1]?.panel?k`<span class="tab-sep" aria-hidden="true" title=${E(`Custom views`)}></span>`:j}
|
|
971
|
+
<button type="button" role="tab" id=${Nc(o)} aria-selected=${c?`true`:`false`} aria-controls=${i} class="tab ${a.panel?`panel-tab`:``} ${c?`sel`:``}" title=${a.tip??j} @click=${()=>r(a.id)}>
|
|
972
|
+
<span class="tab-ic" aria-hidden="true">${a.icon}</span><span class="tab-label" data-label=${a.label}>${a.label}</span>${s&&s[0]!==``?k`<span class="badge" data-tone=${I(s[1])}>${s[0]}</span>`:j}
|
|
973
|
+
</button>`})}
|
|
974
|
+
</div>
|
|
975
|
+
<span class="tab-ind init" aria-hidden="true"></span>
|
|
976
|
+
${a?k`<span class="tabhint meta" role="note" aria-label=${E(`Keyboard shortcuts`)} ><span aria-hidden="true"><span class="kbd">1</span>–<span class="kbd">${Math.min(9,e.length)}</span> ${E(`Tabs`)} |
|
|
977
|
+
<span class="kbd">r</span> ${E(`Runs`)} | <span class="kbd">/</span> ${E(`Filter`)}</span></span >`:j}
|
|
978
|
+
</nav>`}(Mc(this.snap.info.panels),this.viewRoute.tab,e=>e===`tasks`?[i.total||``,`neutral`]:e===`journal`?[r||``,`neutral`]:e===`procs`?[n.procs?.alive&&t||``,`running`]:null,e=>this.navigate({tab:e}),`main`,this.shortcutScope!==`off`)}renderBar(e){let{viewRoute:t}=this;if(t.tab!==`tasks`&&t.tab!==`journal`)return j;let{counts:n,kinds:r}=e,i=n.total;return k`<div class="bar">
|
|
979
|
+
<select title=${E(`Kind`)} aria-label=${E(`Kind`)} @change=${e=>this.navigate({kind:e.target.value})}>
|
|
980
|
+
<option value="" ?selected=${!t.kind}>${E(`All kinds`)}</option>
|
|
981
|
+
${r.map(e=>k`<option ?selected=${e===t.kind}>${e}</option>`)}
|
|
982
|
+
</select>
|
|
983
|
+
<input placeholder=${E(`Filter`)} aria-label=${E(`Text filter`)} size="22" title=${this.shortcutScope===`off`?E(`Text filter`):E(`Text filter (/)`)} .value=${this.qDraft??t.q} @input=${e=>this.setQ(e.target.value)} />
|
|
984
|
+
<span class="meta">${t.tab===`journal`?function({tries:e,notStarted:t}){return K(E(e===1?`1 attempt`:T`${e} attempts`),t?X(`not_started`,t):``)}(e.tries):E(i===1?`1 task`:T`${i} tasks`)}</span>
|
|
985
|
+
</div>`}};U([P({attribute:`base-url`})],$.prototype,`baseUrl`,void 0),U([P({attribute:`export`})],$.prototype,`exportUrl`,void 0),U([P()],$.prototype,`history`,void 0),U([P()],$.prototype,`shortcuts`,void 0),U([P()],$.prototype,`run`,void 0),U([P()],$.prototype,`locale`,void 0),U([P()],$.prototype,`theme`,void 0),U([P({type:Boolean,reflect:!0})],$.prototype,`live`,void 0),U([F()],$.prototype,`snap`,void 0),U([F()],$.prototype,`viewRoute`,void 0),U([F()],$.prototype,`pickerOpen`,void 0),U([F()],$.prototype,`qDraft`,void 0),U([xn(`main`)],$.prototype,`main`,void 0),U([xn(`ca-toasts`)],$.prototype,`toasts`,void 0),U([xn(`.runbtn`)],$.prototype,`runBtn`,void 0),U([xn(`ca-run-picker`)],$.prototype,`picker`,void 0),$=U([N(`ca-monitor`),D()],$);export{tr as BUILTIN_TABS,Kf as CaClock,zd as CaContracts,Ud as CaDefinition,Wd as CaDefinitions,Jf as CaHosts,Nd as CaJournalTable,il as CaKpis,ml as CaModelUsage,$ as CaMonitor,gd as CaOverview,Zd as CaPanelBody,Qd as CaPanelView,ed as CaPipelineGraph,Xc as CaProcTree,Gd as CaProcsView,hl as CaQuota,ad as CaRunDriver,Xf as CaRunPicker,ol as CaSpendBreakdown,kd as CaTaskTable,Gf as CaTaskView,dd as CaTimeline,Ac as CaToasts,Af as CaTranscript,fd as CaWorkers,ir as DEFAULT_VIEW_ROUTE,On as LOCALE_NAMES,gl as LOOP_SEGMENT,cl as OTHER_COLOUR,sl as SERIES_COLOURS,nr as TASK_VIEWS,od as TIMELINE_WINDOW_MS,rr as TREND_DAYS,dr as ViewRouter,lf as agentLabel,Dn as allLocales,lr as applyPatch,Df as applyTranscriptEvents,Td as attemptFacts,Pu as autoLayer,Ju as budgetFor,af as checkMessage,rf as checkName,Bc as checkRowsFromContract,Vc as checkTableStrings,In as chooseLocale,tu as chooseOpen,nf as classifyRounds,ru as compound,An as configureLocales,zc as contentObject,Fd as ctChips,eu as doi,Q as emit,bf as emptyTranscript,B as esc,Ao as factList,K as facts,Cd as filterJournal,_d as filterTasks,No as firstLine,ef as fixupErrors,z as fmtDur,cr as formatViewRoute,jn as getLocale,Au as graphFromPlan,ku as graphInput,Sd as hadFixup,Ql as interest,tf as isFixup,ur as isNewPlace,jd as journalColumns,wd as journalTally,q as kindUnit,Qc as kpiAction,nl as kpiTiles,Zc as kpis,cd as laneStyles,ud as lanesFromJournal,df as launchWho,Nu as layerGraph,Mo as listText,G as localTime,cu as markSel,Mu as matrixFromPlan,ju as matrixInput,ul as modelColours,ll as modelId,fl as modelRows,$l as notable,Lu as parentLayer,lu as parseSelection,sr as parseViewRoute,ou as passMatrix,Yl as placeKey,Zl as placeStats,Fn as preferredLocale,rd as preflightRows,Oo as relAgo,Iu as resolveLayer,xd as retriedKeys,Rc as rootOf,Oc as rowToast,ko as sentence,Mn as setLocale,dl as shareParts,Ad as shortStop,su as sortPassRows,yd as sortTasks,Yu as spanFor,Fu as splitLayer,Dd as taskColumns,Ld as taskName,fu as taskStateStyles,J as tokenCount,Xu as tooWide,nu as towardOf,hf as transcriptSections,ep as trendSections,Lc as typeOk,Po as unreadEvents,Y as usd,yf as webResults,ff as whoTags};
|