@contraagent/ui 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -2
- package/custom-elements.json +7286 -0
- package/dist/adapters/check-rows.d.ts +20 -0
- package/dist/adapters/check-rows.d.ts.map +1 -0
- package/dist/adapters/check-rows.js +77 -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 +34 -0
- package/dist/adapters/panel-body.d.ts.map +1 -0
- package/dist/adapters/panel-body.js +90 -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 +1028 -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/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/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 +42 -0
- package/dist/elements/lists/ca-panel-body.d.ts.map +1 -0
- package/dist/elements/lists/ca-panel-body.js +210 -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/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 +67 -0
- package/dist/elements/overview/ca-overview.d.ts.map +1 -0
- package/dist/elements/overview/ca-overview.js +463 -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-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-services.d.ts +25 -0
- package/dist/elements/overview/ca-services.d.ts.map +1 -0
- package/dist/elements/overview/ca-services.js +77 -0
- package/dist/elements/overview/ca-services.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/index.d.ts +11 -0
- package/dist/elements/overview/index.d.ts.map +1 -0
- package/dist/elements/overview/index.js +11 -0
- package/dist/elements/overview/index.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/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/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/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/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/contract-parts.d.ts +35 -0
- package/dist/elements/shared/contract-parts.d.ts.map +1 -0
- package/dist/elements/shared/contract-parts.js +167 -0
- package/dist/elements/shared/contract-parts.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 +182 -0
- package/dist/elements/shell/ca-monitor.d.ts.map +1 -0
- package/dist/elements/shell/ca-monitor.js +549 -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 +291 -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/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/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/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/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 +785 -0
- package/dist/locales/ja.d.ts.map +1 -0
- package/dist/locales/ja.js +791 -0
- package/dist/locales/ja.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 +23 -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 +28 -0
- package/dist/words/index.d.ts.map +1 -0
- package/dist/words/index.js +32 -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 +17 -0
- package/dist/words/panels.d.ts.map +1 -0
- package/dist/words/panels.js +63 -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/services.d.ts +16 -0
- package/dist/words/services.d.ts.map +1 -0
- package/dist/words/services.js +45 -0
- package/dist/words/services.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/docs/embed.md +121 -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 +81 -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 +112 -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 +200 -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 +499 -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-services.ts +66 -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 +10 -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 +174 -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 +528 -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 +296 -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 +795 -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 +29 -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 +31 -0
- package/src/words/models.ts +50 -0
- package/src/words/outcome.ts +61 -0
- package/src/words/panels.ts +71 -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/services.ts +57 -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,206 @@
|
|
|
1
|
+
import type { DefinitionFile, TaskDefinition } from '@contraagent/api';
|
|
2
|
+
import { localized, msg, str } from '@lit/localize';
|
|
3
|
+
import { LitElement, css, html, nothing, type TemplateResult } from 'lit';
|
|
4
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
5
|
+
import { unsafeHTML } from 'lit/directives/unsafe-html.js';
|
|
6
|
+
import { highlight, mdFile } from '@contraagent/elements/markdown';
|
|
7
|
+
import { instructionsHtml, markInstructions } from '../../words/prompt.js';
|
|
8
|
+
import { facts as row } from '../../words/format.js';
|
|
9
|
+
import { retryTip } from '../../words/attempts.js';
|
|
10
|
+
import { implementationOfLabel, implementationOfTip, outputOfText, outputOfTip, preserveLabel, preserveTip, retriedExceptionsLabel, retriedExceptionsTip, retriesLabel, retriesText } from '../../words/task-definition.js';
|
|
11
|
+
import { RememberedSet } from '../../core/memory.js';
|
|
12
|
+
import { base, factStyles, prose } from '@contraagent/elements/styles';
|
|
13
|
+
import { contractChipStyles } from './contract-parts.js';
|
|
14
|
+
|
|
15
|
+
const OPEN_FIRST = new Set(['instructions', 'schema', 'agent']);
|
|
16
|
+
|
|
17
|
+
/** A long path cut from the left to its last two parts (`…/plugins/docs`); the full path goes in a tooltip. */
|
|
18
|
+
const tail = (p: string): string => {
|
|
19
|
+
const parts = p.split('/').filter(Boolean);
|
|
20
|
+
return parts.length > 2 ? `…/${parts.slice(-2).join('/')}` : p;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
interface DeclaredContract {
|
|
24
|
+
io: string;
|
|
25
|
+
path: string;
|
|
26
|
+
schema: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* What defines one kind of task: its role, plugin, params and output, the
|
|
31
|
+
* contracts it declares, and every file (instructions, the role's agent file,
|
|
32
|
+
* skills, the schema), markdown rendered with a switch to the source.
|
|
33
|
+
*/
|
|
34
|
+
@customElement('ca-definition')
|
|
35
|
+
@localized()
|
|
36
|
+
export class CaDefinition extends LitElement {
|
|
37
|
+
static override styles = [
|
|
38
|
+
base,
|
|
39
|
+
prose,
|
|
40
|
+
factStyles,
|
|
41
|
+
contractChipStyles,
|
|
42
|
+
css`
|
|
43
|
+
:host { display: block; }
|
|
44
|
+
.ct-in { display: flex; align-items: center; gap: 10px; padding: 5px 4px; border-top: 1px solid var(--line); }
|
|
45
|
+
.df { border-top: 1px solid var(--line); }
|
|
46
|
+
/* A file: its name opens and closes it (a disclosure button), and a Markdown file has its own toggle beside it. */
|
|
47
|
+
/* Too narrow for the name and the toggle on one line: the toggle goes under the name. */
|
|
48
|
+
.df-hd { padding: 6px 2px; display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: center; }
|
|
49
|
+
.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;
|
|
50
|
+
color: inherit; text-align: start; cursor: pointer; }
|
|
51
|
+
.df-sum .jmono { min-width: 0; overflow-wrap: anywhere; }
|
|
52
|
+
.df-tog { flex: none; margin-inline-start: auto; }
|
|
53
|
+
.df-sum::before { content: '▸'; color: var(--text-muted); width: 10px; flex: none; transition: transform 0.15s; }
|
|
54
|
+
.df-sum[aria-expanded='true']::before { transform: rotate(90deg); }
|
|
55
|
+
.py-sig { font-family: var(--mono); font-size: 14px; padding: 10px 14px; background: var(--well); border: 1px solid var(--line);
|
|
56
|
+
border-radius: 8px; overflow-x: auto; white-space: pre; }
|
|
57
|
+
.py-where { margin: 6px 2px 12px; font-family: var(--mono); font-size: 11.5px; color: var(--text-muted); overflow-wrap: anywhere; }
|
|
58
|
+
.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; }
|
|
59
|
+
.src { display: grid; grid-template-columns: auto minmax(0, 1fr); background: var(--well); border: 1px solid var(--line);
|
|
60
|
+
border-radius: 8px; font-family: var(--mono); font-size: 12px; line-height: 1.55; max-height: 520px; overflow: auto; }
|
|
61
|
+
.src pre { margin: 0; padding: 10px 12px; white-space: pre; }
|
|
62
|
+
.src .ln { color: var(--text-muted); text-align: right; user-select: none; border-right: 1px solid var(--line); opacity: 0.7; }
|
|
63
|
+
`,
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
@property({ attribute: false }) definition: TaskDefinition | null = null;
|
|
67
|
+
/** Remember open files and the rendered/source choice under this id (in the history entry, or the embedded monitor's memory). */
|
|
68
|
+
@property() memory = 'definition';
|
|
69
|
+
|
|
70
|
+
private open = new RememberedSet('definition:open', this);
|
|
71
|
+
private source = new RememberedSet('definition:source', this);
|
|
72
|
+
|
|
73
|
+
override willUpdate(changed: Map<string, unknown>): void {
|
|
74
|
+
if (changed.has('memory')) {
|
|
75
|
+
this.open = new RememberedSet(`${this.memory}:open`, this);
|
|
76
|
+
this.source = new RememberedSet(`${this.memory}:source`, this);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
override render() {
|
|
81
|
+
const def = this.definition;
|
|
82
|
+
if (!def) {
|
|
83
|
+
return html`<div class="blank"><span class="ic" aria-hidden="true">⌘</span><b>${msg('No definition')}</b></div>`;
|
|
84
|
+
}
|
|
85
|
+
if (def.executor === 'python') return this.python(def);
|
|
86
|
+
const dirs = def.plugin_dirs || [];
|
|
87
|
+
const output = def.output_from === 'message'
|
|
88
|
+
? row(def.output || '', msg('from the final message', { desc: "The task's output is the agent's last message of a session" }))
|
|
89
|
+
: def.output || '';
|
|
90
|
+
const preserve = def.preserve ?? [];
|
|
91
|
+
const facts: [string, string | TemplateResult][] = [
|
|
92
|
+
...(def.base_kind ? [[implementationOfLabel(), html`<span class="jmono" title=${implementationOfTip()}>${def.base_kind}</span>`] as [string, TemplateResult]] : []),
|
|
93
|
+
[msg('Role'), def.role || msg('none', { id: 'none', desc: 'An empty value' })],
|
|
94
|
+
[
|
|
95
|
+
dirs.length > 1 ? msg('Plugin directories') : msg('Plugin directory'),
|
|
96
|
+
dirs.length ? html`${dirs.map((d, i) => html`${i ? ', ' : ''}<span class="jmono" title=${d}>${tail(d)}</span>`)}` : msg('none', { id: 'none', desc: 'An empty value' }),
|
|
97
|
+
],
|
|
98
|
+
[msg('Parameters'), def.params || msg('none', { id: 'none', desc: 'An empty value' })],
|
|
99
|
+
[
|
|
100
|
+
msg('Output', { id: 'definition-output', desc: 'The output file of a task definition' }),
|
|
101
|
+
def.output_of
|
|
102
|
+
? html`<span title=${outputOfTip()}>${row(output, outputOfText(def.output_of))}</span>`
|
|
103
|
+
: output || msg('none', { id: 'none', desc: 'An empty value' }),
|
|
104
|
+
],
|
|
105
|
+
...(preserve.length
|
|
106
|
+
? [[preserveLabel(), html`<span class="jmono" title=${preserveTip()}>${preserve.join(', ')}</span>`] as [string, TemplateResult]]
|
|
107
|
+
: []),
|
|
108
|
+
...((def.validators || []).length ? [[msg('Other checks'), (def.validators || []).join(', ')] as [string, string]] : []),
|
|
109
|
+
...(Array.isArray(def.tools) && def.tools.length === 0
|
|
110
|
+
? [[msg('Tools', { desc: "The coding agent's tools in a task definition" }), msg('none', { id: 'none', desc: 'An empty value' })] as [string, string]]
|
|
111
|
+
: []),
|
|
112
|
+
];
|
|
113
|
+
const declared = Array.isArray(def['declared']) ? (def['declared'] as DeclaredContract[]) : [];
|
|
114
|
+
// The role file this kind runs as goes first, open; other roles' files are folded.
|
|
115
|
+
const isRole = (f: DefinitionFile) => f.part === 'agent' && !!def.role && f.path.replace(/^.*\//, '') === `${def.role}.md`;
|
|
116
|
+
const files = [...(def.files || [])].sort((a, b) => Number(isRole(b)) - Number(isRole(a)));
|
|
117
|
+
return html`<div class="drv-facts" style="margin-bottom:10px">${facts.map(([k, v]) => html`<span><i>${k}</i>${v}</span>`)}</div>
|
|
118
|
+
${declared.length
|
|
119
|
+
? html`<h4 class="sect-h">${msg('Checked files')}</h4>
|
|
120
|
+
${declared.map(
|
|
121
|
+
(x) => html`<div class="ct-in">
|
|
122
|
+
<span class="ct-chip">${x.io}</span><span class="jmono">${x.path}</span>
|
|
123
|
+
<span class="meta" title=${msg('The schema the file is checked against')}>${msg(str`Schema ${x.schema}`)}</span>
|
|
124
|
+
</div>`,
|
|
125
|
+
)}`
|
|
126
|
+
: nothing}
|
|
127
|
+
${files.length
|
|
128
|
+
? html`<h4 class="sect-h">${msg('Files')}</h4>${files.map((f) => this.file(f, isRole(f), !!def.role))}`
|
|
129
|
+
: html`<div class="meta">${msg(html`No files | defined in Python code (<code>TaskAdapter</code>)`)}</div>`}`;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** A Python task's kind, shown as its function: signature, where it is, docstring, facts, source. */
|
|
133
|
+
private python(def: TaskDefinition) {
|
|
134
|
+
const src = (def.files || []).find((f) => f.part === 'source');
|
|
135
|
+
const first = def.line ?? 1;
|
|
136
|
+
const lines = src ? src.text.replace(/\n$/, '').split('\n').length : 0;
|
|
137
|
+
const retryOn = def.retry_on ?? [];
|
|
138
|
+
const facts: [string, string | TemplateResult][] = [
|
|
139
|
+
[msg('Parameters'), def.params && def.params !== 'none' ? def.params : msg('none', { id: 'none', desc: 'An empty value' })],
|
|
140
|
+
[msg('Output', { id: 'definition-output', desc: 'The output file of a task definition' }), def.output && def.output !== 'none' ? def.output : msg('none', { id: 'none', desc: 'An empty value' })],
|
|
141
|
+
...((def.validators || []).length ? [[msg('Other checks'), (def.validators || []).join(', ')] as [string, string]] : []),
|
|
142
|
+
...(def.retries ? [[retriesLabel(), html`<span title=${retryTip()}>${retriesText(def.retries)}</span>`] as [string, TemplateResult]] : []),
|
|
143
|
+
...(def.retries && retryOn.length
|
|
144
|
+
? [[retriedExceptionsLabel(), html`<span class="jmono" title=${retriedExceptionsTip()}>${retryOn.join(', ')}</span>`] as [string, TemplateResult]]
|
|
145
|
+
: []),
|
|
146
|
+
];
|
|
147
|
+
return html`${def.signature
|
|
148
|
+
? html`<div class="py-sig hl">${unsafeHTML(highlight(`def ${def.signature}`, 'python'))}</div>`
|
|
149
|
+
: nothing}
|
|
150
|
+
<div class="py-where">
|
|
151
|
+
${def.function ?? def.kind}${def.file
|
|
152
|
+
? html` | <span title=${def.file}>${def.file.replace(/^.*\//, '')}${def.line ? `:${def.line}` : ''}</span>`
|
|
153
|
+
: nothing}
|
|
154
|
+
</div>
|
|
155
|
+
${def.doc ? html`<div class="py-doc">${def.doc}</div>` : nothing}
|
|
156
|
+
<div class="drv-facts" style="margin-bottom:12px">${facts.map(([k, v]) => html`<span><i>${k}</i>${v}</span>`)}</div>
|
|
157
|
+
${src
|
|
158
|
+
? html`<h4 class="sect-h">${msg('Source')}</h4>
|
|
159
|
+
<div class="src">
|
|
160
|
+
<pre class="ln">${Array.from({ length: lines }, (_, i) => first + i).join('\n')}</pre>
|
|
161
|
+
<pre class="hl">${unsafeHTML(highlight(src.text.replace(/\n$/, ''), 'python'))}</pre>
|
|
162
|
+
</div>`
|
|
163
|
+
: nothing}`;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
private file(f: DefinitionFile, isRole = false, hasRole = false) {
|
|
167
|
+
const id = `${f.part}|${f.path}`;
|
|
168
|
+
const isMd = /\.md$/i.test(f.path);
|
|
169
|
+
const instructions = f.part === 'instructions';
|
|
170
|
+
const showSource = !isMd || this.source.has(id);
|
|
171
|
+
// Of the role files, only the one this kind uses opens by default.
|
|
172
|
+
const openFirst = f.part === 'agent' && hasRole ? isRole : OPEN_FIRST.has(f.part);
|
|
173
|
+
const isOpen = this.open.has(id) || (openFirst && !this.open.has(`closed:${id}`));
|
|
174
|
+
const toggle = () => {
|
|
175
|
+
this.open.set(id, !isOpen);
|
|
176
|
+
this.open.set(`closed:${id}`, isOpen);
|
|
177
|
+
this.requestUpdate();
|
|
178
|
+
};
|
|
179
|
+
const flip = () => {
|
|
180
|
+
this.source.set(id, !this.source.has(id));
|
|
181
|
+
this.requestUpdate();
|
|
182
|
+
};
|
|
183
|
+
return html`<div class="df">
|
|
184
|
+
<div class="df-hd">
|
|
185
|
+
<button type="button" class="df-sum" aria-expanded=${isOpen ? 'true' : 'false'} @click=${toggle}>
|
|
186
|
+
<span class="tag">${f.part}</span><span class="jmono">${f.path}</span>
|
|
187
|
+
${isRole ? html`<span class="ct-chip">${msg('Role of this kind')}</span>` : nothing}
|
|
188
|
+
</button>
|
|
189
|
+
${isMd
|
|
190
|
+
? html`<button type="button" class="df-tog" @click=${flip}>${showSource ? msg('Show rendered') : msg('Show source')}</button>`
|
|
191
|
+
: nothing}
|
|
192
|
+
</div>
|
|
193
|
+
${!isOpen
|
|
194
|
+
? nothing
|
|
195
|
+
: showSource
|
|
196
|
+
? html`<pre class="df-text"><code class="hl">${unsafeHTML(instructions ? instructionsHtml(f.text) : highlight(f.text, f.path))}</code></pre>`
|
|
197
|
+
: unsafeHTML(mdFile(f.text, instructions ? markInstructions : undefined))}
|
|
198
|
+
</div>`;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
declare global {
|
|
203
|
+
interface HTMLElementTagNameMap {
|
|
204
|
+
'ca-definition': CaDefinition;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// A contract file read the way a person checks it: each field of its schema
|
|
2
|
+
// against what the file holds. Templates shared by the outputs view and a task's
|
|
3
|
+
// input/output view (`file-card.ts`); their classes are in `contractStyles`.
|
|
4
|
+
import { type ContractSpec, type ContractStatus, type FileView } from '@contraagent/api';
|
|
5
|
+
import { msg, str } from '@lit/localize';
|
|
6
|
+
import { css, html, nothing, type TemplateResult } from 'lit';
|
|
7
|
+
import { facts, localTime } from '../../words/format.js';
|
|
8
|
+
import { contractStatusLabel, contractStatusWhy } from '../../words/contract.js';
|
|
9
|
+
import { preserveLabel, preserveTip } from '../../words/task-definition.js';
|
|
10
|
+
import { statusChip } from '@contraagent/elements/primitives';
|
|
11
|
+
import { verdict, verdictStyles } from '@contraagent/elements/check-table';
|
|
12
|
+
import '@contraagent/elements/check-table/define';
|
|
13
|
+
import { checkRowsFromContract, checkTableStrings, contentObject, rootOf, rowOf } from '../../adapters/check-rows.js';
|
|
14
|
+
import { contractTone } from '../../lib/tone.js';
|
|
15
|
+
import '@contraagent/elements/json-tree/define';
|
|
16
|
+
|
|
17
|
+
/** An input file's state: found, or missing (and whether the task needed it). */
|
|
18
|
+
export function inputChip(o: ContractSpec): TemplateResult {
|
|
19
|
+
const ok = !!o.file.exists;
|
|
20
|
+
const text = ok ? msg('found') : o.required ? msg('missing (required)') : msg('missing (optional)');
|
|
21
|
+
return statusChip('ct-chip', { text, tone: ok ? 'done' : o.required ? 'failed' : 'muted' });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** A checked file's status as a chip, with its cause as the tooltip, and a count after the word when given; '—' without one. */
|
|
25
|
+
export function contractChip(s: ContractStatus | null | undefined, count?: number): TemplateResult {
|
|
26
|
+
if (!s) return statusChip('ct-chip', { text: '—' });
|
|
27
|
+
return statusChip('ct-chip', {
|
|
28
|
+
text: count === undefined ? contractStatusLabel(s) : html`${contractStatusLabel(s)} <b>${count}</b>`,
|
|
29
|
+
tone: contractTone(s),
|
|
30
|
+
title: contractStatusWhy(s),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
/** The file's content as a tree, or as text when it is not JSON. */
|
|
36
|
+
export function fileContent(f: FileView): TemplateResult {
|
|
37
|
+
const c = f.content;
|
|
38
|
+
return c !== null && typeof c === 'object'
|
|
39
|
+
? html`<cae-json-tree .value=${c}></cae-json-tree>`
|
|
40
|
+
: html`<pre class="jtree">${typeof c === 'string' ? c : msg('Not JSON')}</pre>`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The contract on the left of each row, the file's value on the right, a
|
|
45
|
+
* verdict per field (`<cae-check-table>`); a text result shows the file itself.
|
|
46
|
+
*/
|
|
47
|
+
export function fieldCheckTable(o: ContractSpec): TemplateResult {
|
|
48
|
+
const f = o.file;
|
|
49
|
+
const rows = checkRowsFromContract(o);
|
|
50
|
+
const whole = html`<details class="ct-raw">
|
|
51
|
+
<summary>${wholeFile(f)}</summary>
|
|
52
|
+
${fileContent(f)}
|
|
53
|
+
</details>`;
|
|
54
|
+
// A text result (a text file, or one JSON value) has no fields to check: show the file itself.
|
|
55
|
+
if (!rows) return f.exists ? whole : html``;
|
|
56
|
+
// Rows: the fields of one line, and the lines themselves.
|
|
57
|
+
if (o.format === 'jsonl') {
|
|
58
|
+
const lines = html`<details class="ct-raw">
|
|
59
|
+
<summary>${facts(rowCount(f), `${f.size ?? 0} B`, f.mtime ? msg(str`written ${localTime(f.mtime, true)}`) : '', f.truncated ? msg('truncated') : '')}</summary>
|
|
60
|
+
${fileContent(f)}
|
|
61
|
+
</details>`;
|
|
62
|
+
return html`<cae-check-table .rows=${rows} .showValues=${false} .strings=${checkTableStrings()}></cae-check-table>
|
|
63
|
+
${f.exists ? lines : nothing}`;
|
|
64
|
+
}
|
|
65
|
+
// No file: the fields it must have, and nothing to check them against; its status chip says it is not there.
|
|
66
|
+
if (!f.exists) return rows.length ? html`<cae-check-table .rows=${rows} .showValues=${false} .strings=${checkTableStrings()}></cae-check-table>` : html``;
|
|
67
|
+
return html`<cae-check-table .rows=${rows} .strings=${checkTableStrings()}></cae-check-table>
|
|
68
|
+
${!contentObject(o) ? html`<div class="meta note">${msg('Not a JSON object')}</div>` : nothing}
|
|
69
|
+
${whole}`;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** How many rows a rows file holds, in words: `3 rows`. */
|
|
73
|
+
function rowCount(f: FileView): string {
|
|
74
|
+
const n = Array.isArray(f.content) ? f.content.length : 0;
|
|
75
|
+
return n === 1 ? msg('1 row') : msg(str`${n} rows`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** The fold over a file's content: `Whole file | 1204 B | written Oct 12, 10:38:40`. */
|
|
79
|
+
const wholeFile = (f: FileView): string =>
|
|
80
|
+
facts(msg('Whole file'), `${f.size ?? 0} B`, f.mtime ? msg(str`written ${localTime(f.mtime, true)}`) : '', f.truncated ? msg('truncated') : '');
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* The schema as the reader names it: the class name for a model, "text" for a
|
|
84
|
+
* text result. The class name stays in the tooltip.
|
|
85
|
+
*/
|
|
86
|
+
export function schemaName(o: ContractSpec): TemplateResult {
|
|
87
|
+
const root = rootOf(o.schema_name);
|
|
88
|
+
const shown = o.schema_name === 'text' || root === 'str' ? msg('text') : root ?? rowOf(o.schema_name) ?? o.schema_name;
|
|
89
|
+
return html`<b class="jmono" title=${o.schema_ref || o.schema_name}>${shown}</b>`;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** What kind of file it must be, in words. */
|
|
93
|
+
export function formatOf(o: ContractSpec): unknown {
|
|
94
|
+
const tip = o.schema_ref || o.schema_name;
|
|
95
|
+
if (o.schema_name === 'text') return msg('text file');
|
|
96
|
+
if (o.format === 'jsonl') return msg(html`JSON Lines, one object of schema ${schemaName(o)} per line`);
|
|
97
|
+
const root = rootOf(o.schema_name);
|
|
98
|
+
if (root === 'str') return html`<span title=${tip}>${msg('text (JSON string)')}</span>`;
|
|
99
|
+
if (root) return html`<span title=${tip}>${msg(str`JSON value of type ${root}`)}</span>`;
|
|
100
|
+
return msg(html`JSON object, schema ${schemaName(o)}`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** The checks beyond the schema (validators), each with its result when the status tells it; null when there are none. */
|
|
104
|
+
export function otherChecks(o: ContractSpec): TemplateResult | null {
|
|
105
|
+
const names = o.validators ?? [];
|
|
106
|
+
if (!names.length) return null;
|
|
107
|
+
const errors = (o.errors ?? []).join('\n');
|
|
108
|
+
const mark = (n: string) =>
|
|
109
|
+
o.status === 'valid' ? verdict('pass', msg('passed')) : errors.includes(n) ? verdict('fail', msg('failed checks')) : nothing;
|
|
110
|
+
return html`${names.map((n, i) => html`${i ? ', ' : ''}<span class="jmono">${n}</span> ${mark(n)}`)}`;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* What a contract file must be, as labelled lines a reader can follow without
|
|
115
|
+
* knowing the contract machinery: its format, and (for an output) whether a file
|
|
116
|
+
* from before the task counts, or (for an input) when it is checked and whether
|
|
117
|
+
* the task can start without it.
|
|
118
|
+
*/
|
|
119
|
+
export function fileConditions(o: ContractSpec, role: 'input' | 'output'): TemplateResult {
|
|
120
|
+
const format = formatOf(o);
|
|
121
|
+
const checks = otherChecks(o);
|
|
122
|
+
const rows: [string, unknown, string?][] =
|
|
123
|
+
role === 'output'
|
|
124
|
+
? [
|
|
125
|
+
[msg('Format'), format],
|
|
126
|
+
...(checks ? [[msg('Other checks'), checks, msg('Checks beyond the schema (validators)')] as [string, unknown, string]] : []),
|
|
127
|
+
[msg('Must be written during the task'), o.fresh ? msg('yes') : msg('no'), o.fresh ? msg('A file from before the task does not count') : msg('A file from before the task counts')],
|
|
128
|
+
...(o.preserve?.length
|
|
129
|
+
? [[preserveLabel(), html`<span class="jmono">${o.preserve.join(', ')}</span>`, preserveTip()] as [string, unknown, string]]
|
|
130
|
+
: []),
|
|
131
|
+
]
|
|
132
|
+
: [
|
|
133
|
+
[msg('Format'), format],
|
|
134
|
+
...(checks ? [[msg('Other checks'), checks, msg('Checks beyond the schema (validators)')] as [string, unknown, string]] : []),
|
|
135
|
+
[msg('Check time'), msg('when the task starts')],
|
|
136
|
+
[msg('Required'), o.required ? msg('yes') : msg('no')],
|
|
137
|
+
];
|
|
138
|
+
return html`<dl class="conds">
|
|
139
|
+
${rows.map(([k, v, tip]) => html`<dt>${k}</dt><dd title=${tip ?? ''}>${v}</dd>`)}
|
|
140
|
+
</dl>`;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** A chip that names a checked file's status (`statusChip`), or a neutral label in its shape. */
|
|
144
|
+
export const contractChipStyles = css`
|
|
145
|
+
.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; }
|
|
146
|
+
.ct-chip b { margin-left: 4px; }
|
|
147
|
+
/* a checked file's status: tinted by its tone, passed quiet with its ✓ in an outline */
|
|
148
|
+
.ct-chip[data-tone] { background: var(--tone-bg); color: var(--tone); }
|
|
149
|
+
.ct-chip[data-tone='done'] { background: none; box-shadow: inset 0 0 0 1px var(--line2); color: var(--text-2); }
|
|
150
|
+
`;
|
|
151
|
+
|
|
152
|
+
export const contractStyles = css`
|
|
153
|
+
${contractChipStyles}
|
|
154
|
+
${verdictStyles}
|
|
155
|
+
.ct-path { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
156
|
+
.ct-lead { margin: 2px 0 8px; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 6px; }
|
|
157
|
+
/* a name's column as wide as its longest name, up to half the width; a long name or value wraps */
|
|
158
|
+
.conds { display: grid; grid-template-columns: fit-content(50%) minmax(0, 1fr); gap: 2px 14px; margin: 2px 0 10px; font-size: 12px; }
|
|
159
|
+
.conds dt { color: var(--text-muted); overflow-wrap: anywhere; }
|
|
160
|
+
.conds dd { margin: 0; color: var(--text-2); min-width: 0; overflow-wrap: anywhere; }
|
|
161
|
+
.note { margin-top: 6px; }
|
|
162
|
+
.ct-raw { margin-top: 8px; }
|
|
163
|
+
.ct-raw > summary { cursor: pointer; color: var(--text-muted); font-size: 12px; }
|
|
164
|
+
.ct-err { color: var(--status-failed); white-space: pre-wrap; }
|
|
165
|
+
.ct-fields { border-collapse: collapse; width: 100%; }
|
|
166
|
+
.ct-fields td { padding: 2px 10px 2px 0; border: 0; font-size: 12px; }
|
|
167
|
+
.ct-in { display: flex; align-items: center; gap: 10px; padding: 5px 4px; border-top: 1px solid var(--line); }
|
|
168
|
+
h4 { margin: 8px 0 6px; font-size: 12px; color: var(--text-2); font-weight: 600; }
|
|
169
|
+
.io-card { border: 1px solid var(--line); border-radius: 10px; padding: 10px 14px; margin-bottom: 10px; background: var(--raise); }
|
|
170
|
+
.io-hd { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; }
|
|
171
|
+
.io-from { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; margin: -2px 0 8px; }
|
|
172
|
+
.io-hd .ct-path { flex: 1; }
|
|
173
|
+
.io-card.one .io-hd { margin-bottom: 2px; }
|
|
174
|
+
`;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// A task's contract file as a card, for a task's input and output panes. Its
|
|
2
|
+
// classes are in `contractStyles`.
|
|
3
|
+
import { runRelative, type ContractSpec } from '@contraagent/api';
|
|
4
|
+
import { msg } from '@lit/localize';
|
|
5
|
+
import { html, nothing, type TemplateResult } from 'lit';
|
|
6
|
+
import { correctionTip, correctionsLabel, notRunText, type Producer } from '../../words/contract.js';
|
|
7
|
+
import { contractChip, fieldCheckTable, fileConditions, inputChip } from './contract-parts.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* One contract file of a task, as a card: status, path, what it must be, the
|
|
11
|
+
* field check, the check errors. A task that never ran gets one line saying
|
|
12
|
+
* why; a task that failed without writing the file gets its status and path
|
|
13
|
+
* only (the status names the cause).
|
|
14
|
+
*/
|
|
15
|
+
export function ioFileCard(
|
|
16
|
+
o: ContractSpec,
|
|
17
|
+
role: 'input' | 'output',
|
|
18
|
+
run = '',
|
|
19
|
+
opts: {
|
|
20
|
+
producerOf?: (path: string) => Producer | undefined;
|
|
21
|
+
/** Where the file comes from, as a line under its path ("Output of prepare · zeta"). */
|
|
22
|
+
origin?: unknown;
|
|
23
|
+
/** In place of the status chip: an input written by an earlier task shows that task's check of it. */
|
|
24
|
+
chip?: TemplateResult;
|
|
25
|
+
} = {},
|
|
26
|
+
): TemplateResult {
|
|
27
|
+
const stat =
|
|
28
|
+
role === 'output'
|
|
29
|
+
? html`${contractChip(o.status)}${(o.rounds ?? 0) > 1
|
|
30
|
+
? html` <span class="meta" title=${correctionTip()}>${correctionsLabel(o.rounds, o.status === 'valid')}</span>`
|
|
31
|
+
: nothing}`
|
|
32
|
+
: inputChip(o);
|
|
33
|
+
const head = html`<div class="io-hd">${opts.chip ?? stat}<span class="jmono ct-path" title=${o.path}>${runRelative(o.path, run)}</span></div>${opts.origin
|
|
34
|
+
? html`<div class="meta io-from">${opts.origin}</div>`
|
|
35
|
+
: nothing}`;
|
|
36
|
+
if (role === 'output' && o.status === 'refused') {
|
|
37
|
+
return html`<div class="io-card one">${head}<div class="meta">${notRunText(o, run, opts.producerOf)}</div></div>`;
|
|
38
|
+
}
|
|
39
|
+
if (role === 'output' && o.status === 'failed' && !o.file.exists) {
|
|
40
|
+
return html`<div class="io-card one">${head}</div>`;
|
|
41
|
+
}
|
|
42
|
+
const errors = o.errors ?? [];
|
|
43
|
+
return html`<div class="io-card">
|
|
44
|
+
${head}
|
|
45
|
+
${fileConditions(o, role)}
|
|
46
|
+
${fieldCheckTable(o)}
|
|
47
|
+
${errors.length ? html`<h4>${msg('Errors')}</h4><pre class="ct-err">${errors.map((e) => runRelative(e, run)).join('\n')}</pre>` : nothing}
|
|
48
|
+
</div>`;
|
|
49
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// A prompt as a reader reads it: markdown with a rendered/source switch, and its
|
|
2
|
+
// leading TELEMETRY line (which run and task it belongs to) apart, so the prose
|
|
3
|
+
// reads as prose.
|
|
4
|
+
import { msg } from '@lit/localize';
|
|
5
|
+
import { html, type TemplateResult } from 'lit';
|
|
6
|
+
import '@contraagent/elements/markdown/define';
|
|
7
|
+
import { splitTelemetry } from '../../words/prompt.js';
|
|
8
|
+
|
|
9
|
+
/** `text` in a `<cae-markdown>`, in the reader's language. Call it from a `@localized()` element's render. */
|
|
10
|
+
export function promptText(text: string): TemplateResult {
|
|
11
|
+
const strings = { showRendered: msg('Show rendered'), showSource: msg('Show source') };
|
|
12
|
+
return html`<cae-markdown .text=${text} .split=${splitTelemetry} .strings=${strings}></cae-markdown>`;
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// A task named in a list, as a chip of its own: the name keeps its `kind · unit`
|
|
2
|
+
// form without a separator between names, and a click opens the task.
|
|
3
|
+
import { isPython } from '@contraagent/api';
|
|
4
|
+
import { html, type TemplateResult } from 'lit';
|
|
5
|
+
import { emit } from '../../core/events.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `name` as a chip that sends `ca-open-task` for `task` (a Python task opens on its
|
|
9
|
+
* output). A task with no key (a running Python task) is a chip that opens nothing.
|
|
10
|
+
*/
|
|
11
|
+
export function taskChip(from: EventTarget, name: string, task: { key: string; executor?: string }): TemplateResult {
|
|
12
|
+
if (!task.key) return html`<span class="taskchip">${name}</span>`;
|
|
13
|
+
const open = (e: Event): void => {
|
|
14
|
+
e.stopPropagation(); // the row it sits in may open another task
|
|
15
|
+
emit(from, 'ca-open-task', { key: task.key, ...(isPython(task) ? { view: 'output' as const } : {}) });
|
|
16
|
+
};
|
|
17
|
+
return html`<button type="button" class="taskchip" title=${task.key} @click=${open}>${name}</button>`;
|
|
18
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { localized } from '@lit/localize';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
import { customElement } from 'lit/decorators.js';
|
|
4
|
+
import { ClockController } from '@contraagent/elements';
|
|
5
|
+
import { getLocale } from '../../core/i18n.js';
|
|
6
|
+
|
|
7
|
+
/** The wall clock in the header: its own element, so the second tick repaints nothing else. */
|
|
8
|
+
@customElement('ca-clock')
|
|
9
|
+
@localized()
|
|
10
|
+
export class CaClock extends LitElement {
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
new ClockController(this);
|
|
14
|
+
}
|
|
15
|
+
protected override createRenderRoot() {
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
override render() {
|
|
19
|
+
return new Date().toLocaleTimeString(getLocale(), { hour12: false });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
declare global {
|
|
24
|
+
interface HTMLElementTagNameMap {
|
|
25
|
+
'ca-clock': CaClock;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { Hosts, HostSummary } from '@contraagent/api';
|
|
2
|
+
import { localized, msg, str } from '@lit/localize';
|
|
3
|
+
import { LitElement, css, html, nothing } from 'lit';
|
|
4
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
5
|
+
import { statusWord } from '@contraagent/elements/primitives';
|
|
6
|
+
import { base } from '@contraagent/elements/styles';
|
|
7
|
+
import { fmtDur, localTime } from '../../words/format.js';
|
|
8
|
+
import { hostStateLabel, hostsLine, noReportCount, runCount } from '../../words/hosts.js';
|
|
9
|
+
import '../overview/ca-quota.js';
|
|
10
|
+
|
|
11
|
+
/** The column of a host's runs, counted. */
|
|
12
|
+
const runsLabel = () => msg('Runs', { id: 'col-runs', desc: "A column: a host's runs, counted" });
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The hosts behind a hub's runs (`/api/hosts`): each host's state, its last
|
|
16
|
+
* report, the seconds between its reports and its runs; then each account's
|
|
17
|
+
* utilization over every run of every host, as the overview shows a run's.
|
|
18
|
+
*/
|
|
19
|
+
@customElement('ca-hosts')
|
|
20
|
+
@localized()
|
|
21
|
+
export class CaHosts extends LitElement {
|
|
22
|
+
static override styles = [
|
|
23
|
+
base,
|
|
24
|
+
css`
|
|
25
|
+
:host { display: block; container-type: inline-size; }
|
|
26
|
+
.g12 { align-content: start; }
|
|
27
|
+
table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
|
|
28
|
+
th, td { text-align: start; padding: 8px 10px; border-top: 1px solid var(--line); vertical-align: baseline; }
|
|
29
|
+
thead th { border-top: 0; font-size: 11.5px; font-weight: 600; color: var(--text-muted); white-space: nowrap; }
|
|
30
|
+
tbody th { font-family: var(--mono); font-weight: 600; color: var(--text); overflow-wrap: anywhere; }
|
|
31
|
+
.num { font-family: var(--mono); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
32
|
+
td.runs { color: var(--text-2); }
|
|
33
|
+
/* Narrow: one block per host, each value under its column's name. */
|
|
34
|
+
@container (max-width: 640px) {
|
|
35
|
+
thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
|
|
36
|
+
tr { display: block; padding: 8px 0; border-top: 1px solid var(--line); }
|
|
37
|
+
tbody tr:first-child { border-top: 0; }
|
|
38
|
+
th, td { display: flex; gap: 12px; padding: 2px 0; border: 0; white-space: normal; }
|
|
39
|
+
td::before { content: attr(data-label); flex: 0 0 9em; color: var(--text-muted); font-family: var(--sans); font-size: 11.5px; }
|
|
40
|
+
}
|
|
41
|
+
`,
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
/** The host list (`/api/hosts`); null until it arrives. */
|
|
45
|
+
@property({ attribute: false }) hosts: Hosts | null = null;
|
|
46
|
+
|
|
47
|
+
private row(h: HostSummary) {
|
|
48
|
+
const quiet = !h.up;
|
|
49
|
+
return html`<tr>
|
|
50
|
+
<th scope="row">${h.host_id}</th>
|
|
51
|
+
<td data-label=${msg('Status')}>${statusWord({ text: hostStateLabel(h), tone: quiet ? 'attention' : 'done' })}</td>
|
|
52
|
+
<td data-label=${msg('Last report')} class="num" title=${h.last_seen}>${localTime(h.last_seen, true) || '—'}</td>
|
|
53
|
+
<td data-label=${msg('Report interval')} class="num">${h.interval_s == null ? '—' : fmtDur(h.interval_s)}</td>
|
|
54
|
+
<td data-label=${runsLabel()} class="runs"
|
|
55
|
+
><span>${runCount(h.runs)}${h.running ? html` | ${msg(str`${h.running} running`)}` : nothing}${h.unresponsive
|
|
56
|
+
? html` | <span class="tone-text" data-tone="attention">${noReportCount(h.unresponsive)}</span>`
|
|
57
|
+
: nothing}</span></td
|
|
58
|
+
>
|
|
59
|
+
</tr>`;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
override render() {
|
|
63
|
+
const hosts = this.hosts?.hosts ?? [];
|
|
64
|
+
const quota = this.hosts?.quota ?? [];
|
|
65
|
+
return html`<div class="g12">
|
|
66
|
+
<section class="panel c12 enter">
|
|
67
|
+
<h3>${msg('Hosts')}<span class="r">${hostsLine(hosts)}</span></h3>
|
|
68
|
+
${hosts.length
|
|
69
|
+
? html`<table>
|
|
70
|
+
<thead><tr>
|
|
71
|
+
<th scope="col">${msg('Host')}</th><th scope="col">${msg('Status')}</th><th scope="col">${msg('Last report')}</th>
|
|
72
|
+
<th scope="col">${msg('Report interval')}</th><th scope="col">${runsLabel()}</th>
|
|
73
|
+
</tr></thead>
|
|
74
|
+
<tbody>${hosts.map((h) => this.row(h))}</tbody>
|
|
75
|
+
</table>`
|
|
76
|
+
: html`<div class="meta">${msg('No hosts')}</div>`}
|
|
77
|
+
</section>
|
|
78
|
+
${quota.length
|
|
79
|
+
? html`<section class="panel c12 enter">
|
|
80
|
+
<h3 title=${msg('Account-wide | read at each agent session start')}>
|
|
81
|
+
${msg('Subscription usage')}<span class="r">${msg('Per account, first → last reading')}</span></h3>
|
|
82
|
+
<ca-quota .accounts=${quota} .rests=${quota.flatMap((a) => a.rests ?? [])} live></ca-quota>
|
|
83
|
+
</section>`
|
|
84
|
+
: nothing}
|
|
85
|
+
</div>`;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
declare global {
|
|
90
|
+
interface HTMLElementTagNameMap {
|
|
91
|
+
'ca-hosts': CaHosts;
|
|
92
|
+
}
|
|
93
|
+
}
|