@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,20 @@
|
|
|
1
|
+
import type { ContractSpec } from '@contraagent/api';
|
|
2
|
+
import type { CheckRow, CheckTableStrings } from '@contraagent/elements/check-table';
|
|
3
|
+
/** Whether a value has a schema's type; true for a type this check cannot judge (the model's own check judges it). */
|
|
4
|
+
export declare function typeOk(t: string, v: unknown): boolean;
|
|
5
|
+
/** A `RootModel[str]`-style schema: the model wraps one value of the given type. */
|
|
6
|
+
export declare const rootOf: (name: string) => string | null;
|
|
7
|
+
/** A rows schema (`Rows[Finding]`): the model of one line. */
|
|
8
|
+
export declare const rowOf: (name: string) => string | null;
|
|
9
|
+
/** The file as a JSON object, or null (no file, not JSON, or another JSON value). */
|
|
10
|
+
export declare function contentObject(o: ContractSpec): Record<string, unknown> | null;
|
|
11
|
+
/**
|
|
12
|
+
* A row per field of the schema, then a row per field the file has that the
|
|
13
|
+
* schema does not name. Without a file, the fields with no values or verdicts;
|
|
14
|
+
* with a file that is not a JSON object, the fields with no verdicts. Null for
|
|
15
|
+
* a text result (a text file, or one JSON value), which has no fields to check.
|
|
16
|
+
*/
|
|
17
|
+
export declare function checkRowsFromContract(o: ContractSpec): CheckRow[] | null;
|
|
18
|
+
/** The check table's words. */
|
|
19
|
+
export declare function checkTableStrings(): CheckTableStrings;
|
|
20
|
+
//# sourceMappingURL=check-rows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-rows.d.ts","sourceRoot":"","sources":["../../src/adapters/check-rows.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGrF,sHAAsH;AACtH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAQrD;AAED,oFAAoF;AACpF,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAAqD,CAAC;AAErG,8DAA8D;AAC9D,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAAgD,CAAC;AAE/F,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAG7E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,EAAE,GAAG,IAAI,CA+BxE;AAED,+BAA+B;AAC/B,wBAAgB,iBAAiB,IAAI,iBAAiB,CAUrD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { msg, str } from '@lit/localize';
|
|
2
|
+
/** Whether a value has a schema's type; true for a type this check cannot judge (the model's own check judges it). */
|
|
3
|
+
export function typeOk(t, v) {
|
|
4
|
+
if (t.startsWith('list[') || t === 'array')
|
|
5
|
+
return Array.isArray(v);
|
|
6
|
+
if (t === 'string')
|
|
7
|
+
return typeof v === 'string';
|
|
8
|
+
if (t === 'integer')
|
|
9
|
+
return Number.isInteger(v);
|
|
10
|
+
if (t === 'number')
|
|
11
|
+
return typeof v === 'number';
|
|
12
|
+
if (t === 'boolean')
|
|
13
|
+
return typeof v === 'boolean';
|
|
14
|
+
if (t === 'object')
|
|
15
|
+
return v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
/** A `RootModel[str]`-style schema: the model wraps one value of the given type. */
|
|
19
|
+
export const rootOf = (name) => /^RootModel\[(.+)\]$/.exec(name)?.[1] ?? null;
|
|
20
|
+
/** A rows schema (`Rows[Finding]`): the model of one line. */
|
|
21
|
+
export const rowOf = (name) => /^Rows\[(.+)\]$/.exec(name)?.[1] ?? null;
|
|
22
|
+
/** The file as a JSON object, or null (no file, not JSON, or another JSON value). */
|
|
23
|
+
export function contentObject(o) {
|
|
24
|
+
const c = o.file.content;
|
|
25
|
+
return o.file.exists && c !== null && typeof c === 'object' && !Array.isArray(c) ? c : null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A row per field of the schema, then a row per field the file has that the
|
|
29
|
+
* schema does not name. Without a file, the fields with no values or verdicts;
|
|
30
|
+
* with a file that is not a JSON object, the fields with no verdicts. Null for
|
|
31
|
+
* a text result (a text file, or one JSON value), which has no fields to check.
|
|
32
|
+
*/
|
|
33
|
+
export function checkRowsFromContract(o) {
|
|
34
|
+
if (!o.fields.length && (o.schema_name === 'text' || rootOf(o.schema_name) !== null))
|
|
35
|
+
return null;
|
|
36
|
+
const obj = contentObject(o);
|
|
37
|
+
const rows = o.fields.map((x) => {
|
|
38
|
+
const base = { name: x.name, expected: x.type, optional: !x.required };
|
|
39
|
+
if (!obj)
|
|
40
|
+
return { ...base, hasValue: false, verdict: 'none', verdictLabel: '' };
|
|
41
|
+
if (!(x.name in obj))
|
|
42
|
+
return x.required
|
|
43
|
+
? { ...base, hasValue: false, verdict: 'fail', verdictLabel: msg('missing'), tip: msg('A required field that is not in the file') }
|
|
44
|
+
: { ...base, hasValue: false, verdict: 'none', verdictLabel: msg('absent (optional)') };
|
|
45
|
+
const value = obj[x.name];
|
|
46
|
+
return typeOk(x.type, value)
|
|
47
|
+
? { ...base, hasValue: true, value, verdict: 'pass', verdictLabel: msg('passed') }
|
|
48
|
+
: { ...base, hasValue: true, value, verdict: 'fail', verdictLabel: msg('wrong type'), tip: msg(str `Expected ${x.type}`) };
|
|
49
|
+
});
|
|
50
|
+
const extra = obj ? Object.keys(obj).filter((k) => !o.fields.some((x) => x.name === k)) : [];
|
|
51
|
+
return [
|
|
52
|
+
...rows,
|
|
53
|
+
...extra.map((k) => ({
|
|
54
|
+
name: k,
|
|
55
|
+
expected: msg('not in the schema'),
|
|
56
|
+
extra: true,
|
|
57
|
+
hasValue: true,
|
|
58
|
+
value: obj?.[k],
|
|
59
|
+
verdict: 'warn',
|
|
60
|
+
verdictLabel: msg('extra field'),
|
|
61
|
+
tip: msg('Not in the schema'),
|
|
62
|
+
})),
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
/** The check table's words. */
|
|
66
|
+
export function checkTableStrings() {
|
|
67
|
+
return {
|
|
68
|
+
name: msg('Field'),
|
|
69
|
+
expected: msg('Expected'),
|
|
70
|
+
actual: msg('In the file'),
|
|
71
|
+
verdict: msg('Check'),
|
|
72
|
+
optional: msg('optional'),
|
|
73
|
+
items: (n) => (n === 1 ? msg('1 item') : msg(str `${n} items`)),
|
|
74
|
+
object: msg('object'),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=check-rows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-rows.js","sourceRoot":"","sources":["../../src/adapters/check-rows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type JournalRow, type TaskRow } from '@contraagent/api';
|
|
2
|
+
/** Tasks of `kind` (all when ''), whose kind, unit, claims, key or last stop contains `q`. */
|
|
3
|
+
export declare function filterTasks(tasks: readonly TaskRow[], kind: string, q: string): TaskRow[];
|
|
4
|
+
/** The tasks list's order: by `RANK`, then the latest journal row first, then plan order. */
|
|
5
|
+
export declare function sortTasks(tasks: readonly TaskRow[]): TaskRow[];
|
|
6
|
+
/** Keys of tasks that were retried: a try ran after one that ran and failed (`retries`). */
|
|
7
|
+
export declare const retriedKeys: (rows: readonly JournalRow[]) => Set<string>;
|
|
8
|
+
/** A row whose output was sent back to the agent at least once (a fix-up in the same session). */
|
|
9
|
+
export declare const hadFixup: (r: JournalRow) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Journal rows of `kind` with `stop` that contain `q`. Besides a stop value,
|
|
12
|
+
* `stop` takes 'bad' (every attempt that did not complete), 'fixup' (attempts
|
|
13
|
+
* whose output was sent back for a fix-up), 'retried' (every row of a task
|
|
14
|
+
* retried after a failed try, `retries`) and 'replayed' (attempts played from
|
|
15
|
+
* their recordings, `JournalRow.replayed`).
|
|
16
|
+
*/
|
|
17
|
+
export declare function filterJournal(rows: readonly JournalRow[], kind: string, stop: string, q: string): JournalRow[];
|
|
18
|
+
/** Rows per stop, most frequent first. */
|
|
19
|
+
export declare function journalTally(rows: readonly JournalRow[]): [string, number][];
|
|
20
|
+
/**
|
|
21
|
+
* Per task key: how many tries ran (refusals are not tries), and the row index
|
|
22
|
+
* and try number of its last successful try.
|
|
23
|
+
*/
|
|
24
|
+
export declare function attemptFacts(rows: readonly JournalRow[]): Map<string, {
|
|
25
|
+
count: number;
|
|
26
|
+
lastOk: number;
|
|
27
|
+
lastOkTry: number;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/adapters/filters.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,KAAK,UAAU,EAAgB,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3G,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAKzF;AAKD,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAK9D;AAID,4FAA4F;AAC5F,eAAO,MAAM,WAAW,GAAI,MAAM,SAAS,UAAU,EAAE,KAAG,GAAG,CAAC,MAAM,CAA6C,CAAC;AAElH,kGAAkG;AAClG,eAAO,MAAM,QAAQ,GAAI,GAAG,UAAU,KAAG,OAA8B,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAY9G;AAED,0CAA0C;AAC1C,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAI5E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAY3H"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// The list filters and row facts, pure: what the tasks and journal tabs show
|
|
2
|
+
// for a kind, a stop and a text.
|
|
3
|
+
import { isBad, isLaunched, retries } from '@contraagent/api';
|
|
4
|
+
/** Tasks of `kind` (all when ''), whose kind, unit, claims, key or last stop contains `q`. */
|
|
5
|
+
export function filterTasks(tasks, kind, q) {
|
|
6
|
+
const needle = q.toLowerCase();
|
|
7
|
+
return tasks.filter((t) => (!kind || t.kind === kind) && (!needle || `${t.kind} ${t.unit} ${(t.claims ?? []).join(' ')} ${t.key} ${t.last_stop}`.toLowerCase().includes(needle)));
|
|
8
|
+
}
|
|
9
|
+
/** Failed first, then not started, partly done, running and waiting; the rest after them. */
|
|
10
|
+
const RANK = { failed: 0, not_started: 1, partial: 2, running: 3, waiting: 4 };
|
|
11
|
+
/** The tasks list's order: by `RANK`, then the latest journal row first, then plan order. */
|
|
12
|
+
export function sortTasks(tasks) {
|
|
13
|
+
return tasks
|
|
14
|
+
.map((t, i) => ({ t, i }))
|
|
15
|
+
.sort((a, b) => (RANK[a.t.outcome] ?? 9) - (RANK[b.t.outcome] ?? 9) || b.t.last_ts.localeCompare(a.t.last_ts) || a.i - b.i)
|
|
16
|
+
.map((x) => x.t);
|
|
17
|
+
}
|
|
18
|
+
const JOURNAL_TEXT = ['key', 'unit', 'stop', 'kind', 'route', 'reason'];
|
|
19
|
+
/** Keys of tasks that were retried: a try ran after one that ran and failed (`retries`). */
|
|
20
|
+
export const retriedKeys = (rows) => new Set(retries(rows).map((r) => r.key));
|
|
21
|
+
/** A row whose output was sent back to the agent at least once (a fix-up in the same session). */
|
|
22
|
+
export const hadFixup = (r) => (r.rounds ?? 1) > 1;
|
|
23
|
+
/**
|
|
24
|
+
* Journal rows of `kind` with `stop` that contain `q`. Besides a stop value,
|
|
25
|
+
* `stop` takes 'bad' (every attempt that did not complete), 'fixup' (attempts
|
|
26
|
+
* whose output was sent back for a fix-up), 'retried' (every row of a task
|
|
27
|
+
* retried after a failed try, `retries`) and 'replayed' (attempts played from
|
|
28
|
+
* their recordings, `JournalRow.replayed`).
|
|
29
|
+
*/
|
|
30
|
+
export function filterJournal(rows, kind, stop, q) {
|
|
31
|
+
const needle = q.toLowerCase();
|
|
32
|
+
const retried = stop === 'retried' ? retriedKeys(rows) : null;
|
|
33
|
+
return rows.filter((e) => {
|
|
34
|
+
if (stop === 'bad' && !isBad(e))
|
|
35
|
+
return false;
|
|
36
|
+
if (stop === 'fixup' && !hadFixup(e))
|
|
37
|
+
return false;
|
|
38
|
+
if (retried && !retried.has(e.key))
|
|
39
|
+
return false;
|
|
40
|
+
if (stop === 'replayed' && !e.replayed)
|
|
41
|
+
return false;
|
|
42
|
+
if (stop && !['bad', 'fixup', 'retried', 'replayed'].includes(stop) && e.stop !== stop)
|
|
43
|
+
return false;
|
|
44
|
+
if (kind && e.kind !== kind)
|
|
45
|
+
return false;
|
|
46
|
+
return !needle || JOURNAL_TEXT.some((k) => String(e[k] ?? '').toLowerCase().includes(needle));
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** Rows per stop, most frequent first. */
|
|
50
|
+
export function journalTally(rows) {
|
|
51
|
+
const tally = new Map();
|
|
52
|
+
for (const e of rows)
|
|
53
|
+
tally.set(e.stop || '?', (tally.get(e.stop || '?') ?? 0) + 1);
|
|
54
|
+
return [...tally.entries()].sort((a, b) => b[1] - a[1]);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Per task key: how many tries ran (refusals are not tries), and the row index
|
|
58
|
+
* and try number of its last successful try.
|
|
59
|
+
*/
|
|
60
|
+
export function attemptFacts(rows) {
|
|
61
|
+
const facts = new Map();
|
|
62
|
+
rows.forEach((r, i) => {
|
|
63
|
+
const f = facts.get(r.key) ?? { count: 0, lastOk: -1, lastOkTry: 0 };
|
|
64
|
+
if (isLaunched(r))
|
|
65
|
+
f.count++;
|
|
66
|
+
if (r.ok) {
|
|
67
|
+
f.lastOk = i;
|
|
68
|
+
f.lastOkTry = (r.attempt ?? 0) + 1;
|
|
69
|
+
}
|
|
70
|
+
facts.set(r.key, f);
|
|
71
|
+
});
|
|
72
|
+
return facts;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/adapters/filters.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,iCAAiC;AACjC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAA+C,MAAM,kBAAkB,CAAC;AAE3G,8FAA8F;AAC9F,MAAM,UAAU,WAAW,CAAC,KAAyB,EAAE,IAAY,EAAE,CAAS;IAC5E,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC7J,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,MAAM,IAAI,GAAqC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAEjH,6FAA6F;AAC7F,MAAM,UAAU,SAAS,CAAC,KAAyB;IACjD,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC1H,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAEjF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAA2B,EAAe,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAElH,kGAAkG;AAClG,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAa,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAA2B,EAAE,IAAY,EAAE,IAAY,EAAE,CAAS;IAC9F,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACnD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrD,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACrG,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC1C,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,YAAY,CAAC,IAA2B;IACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAA2B;IACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgE,CAAC;IACtF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QACrE,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACT,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACb,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { type Plan } from '@contraagent/api';
|
|
2
|
+
import { type FlowIndex } from './flow-index.js';
|
|
3
|
+
import type { LayerModel, NodeCounts } from './types.js';
|
|
4
|
+
/** Between a function's place and the id of an item drawn inside it. */
|
|
5
|
+
export declare const IN_SEP = "::";
|
|
6
|
+
/** The prefix of a function drawn open: `fx::<place>`. */
|
|
7
|
+
export declare const FLOW_BOX = "fx::";
|
|
8
|
+
/** Where a function node is, across every layer: its layer and its id there (`<layer>/<id>`). */
|
|
9
|
+
export declare const placeKey: (layer: readonly string[], id: string) => string;
|
|
10
|
+
/** What a function's place holds, for choosing what to open. */
|
|
11
|
+
export interface PlaceStats {
|
|
12
|
+
key: string;
|
|
13
|
+
/** The layer it is in, and its node's id there. */
|
|
14
|
+
layer: string[];
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
/** Levels below the layer shown (0: a node of that layer). */
|
|
18
|
+
depth: number;
|
|
19
|
+
/** The loops of its layer's function around it, outermost first, and that function's file. */
|
|
20
|
+
loops: number[];
|
|
21
|
+
file: string;
|
|
22
|
+
/** Its tasks by state. */
|
|
23
|
+
counts: NodeCounts;
|
|
24
|
+
tasks: number;
|
|
25
|
+
/** Its agent tasks. */
|
|
26
|
+
agent: number;
|
|
27
|
+
failed: number;
|
|
28
|
+
running: number;
|
|
29
|
+
/** Tasks not done that will not run on their own: not started, and (once the run is over) pending. */
|
|
30
|
+
stuck: number;
|
|
31
|
+
/** A flow call in it stopped with an error. */
|
|
32
|
+
errors: boolean;
|
|
33
|
+
/** The ids of the nodes its own layer would draw. */
|
|
34
|
+
kids: Set<string>;
|
|
35
|
+
/** The places of the functions in its layer. */
|
|
36
|
+
fns: Set<string>;
|
|
37
|
+
/** The place it is in (null: a node of the layer shown). */
|
|
38
|
+
parent: string | null;
|
|
39
|
+
}
|
|
40
|
+
export interface OpenChoice {
|
|
41
|
+
/** Places the reader opened and closed: they outrank the choice. */
|
|
42
|
+
open?: ReadonlySet<string>;
|
|
43
|
+
closed?: ReadonlySet<string>;
|
|
44
|
+
/** Open every function (bar `closed`). */
|
|
45
|
+
all?: boolean;
|
|
46
|
+
/** The most nodes the drawing holds before it stops opening functions on its own. */
|
|
47
|
+
budget: number;
|
|
48
|
+
/** Places of interest: the selection's, and those around it (`towardOf`); with `sel`, those of that selection. */
|
|
49
|
+
toward?: ReadonlySet<string>;
|
|
50
|
+
sel?: string;
|
|
51
|
+
/** The run is live: a pending task is waiting, not stuck. */
|
|
52
|
+
live?: boolean;
|
|
53
|
+
/** The most layers the drawing may span (left to right, or top to bottom) before it closes again what it opened on its own. */
|
|
54
|
+
maxSpan?: number;
|
|
55
|
+
}
|
|
56
|
+
/** Every function place under the layer `focus`, with what it holds. */
|
|
57
|
+
export declare function placeStats(ix: FlowIndex, focus: readonly string[], live?: boolean): Map<string, PlaceStats>;
|
|
58
|
+
/** A place's interest, before its distance: more tasks, and a failure, running work or a selection in it, more. */
|
|
59
|
+
export declare function interest(s: PlaceStats, toward?: ReadonlySet<string>): number;
|
|
60
|
+
/**
|
|
61
|
+
* Whether a place is worth opening on its own: it holds agent tasks, a failure, running
|
|
62
|
+
* work, work that will not run, or the selection. A place of finished Python steps says
|
|
63
|
+
* all it has in its node's count. (Furnas's threshold: only what is interesting enough is shown.)
|
|
64
|
+
*/
|
|
65
|
+
export declare const notable: (s: PlaceStats, toward?: ReadonlySet<string>) => boolean;
|
|
66
|
+
/** Its degree of interest: its interest less its distance from the layer shown. */
|
|
67
|
+
export declare const doi: (s: PlaceStats, toward?: ReadonlySet<string>) => number;
|
|
68
|
+
/**
|
|
69
|
+
* The places to draw open: the reader's own, then, while the drawing stays within
|
|
70
|
+
* `budget` nodes, the rest in order of their degree of interest (a place's own
|
|
71
|
+
* functions become candidates once it is open), those `notable` only. A place opens only
|
|
72
|
+
* inside open places.
|
|
73
|
+
*/
|
|
74
|
+
export declare function chooseOpen(stats: ReadonlyMap<string, PlaceStats>, rootIds: number, c: OpenChoice): {
|
|
75
|
+
open: Set<string>;
|
|
76
|
+
auto: string[];
|
|
77
|
+
};
|
|
78
|
+
/** The places of interest for a selection: the place it is in or names, and every place around it. */
|
|
79
|
+
export declare function towardOf(sel: string, stats: ReadonlyMap<string, PlaceStats>): Set<string>;
|
|
80
|
+
export interface Compound {
|
|
81
|
+
model: LayerModel;
|
|
82
|
+
/** The places drawn open. */
|
|
83
|
+
open: Set<string>;
|
|
84
|
+
stats: Map<string, PlaceStats>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The layer `focus` of the plan with the places `chooseOpen` picks drawn open: a node
|
|
88
|
+
* per kind and per closed function, a cluster per open function (or one per chain of
|
|
89
|
+
* single functions), the loop boxes of every layer drawn, and the edges between the
|
|
90
|
+
* nodes the tasks are drawn in, whatever layer they are in.
|
|
91
|
+
*/
|
|
92
|
+
export declare function compound(plan: Plan, focus: readonly string[], choice: OpenChoice): Compound;
|
|
93
|
+
//# sourceMappingURL=compound.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compound.d.ts","sourceRoot":"","sources":["../../../src/adapters/graph/compound.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
// The pipeline graph as one drawing of several layers: the layer shown, with some of
|
|
2
|
+
// its functions drawn open, each a cluster that holds its own layer, recursively (a
|
|
3
|
+
// compound graph, laid out by `arrange` as a layered drawing of nested clusters).
|
|
4
|
+
//
|
|
5
|
+
// Which functions are open is a degree-of-interest choice (Furnas 1986, "Generalized
|
|
6
|
+
// fisheye views"; Card & Nation 2002, "Degree-of-interest trees"): each function node
|
|
7
|
+
// has an a-priori interest (its tasks, and whether any failed, runs or did not run,
|
|
8
|
+
// and whether the selection is in it) less its distance from the layer shown, and the
|
|
9
|
+
// most interesting open first while the drawing stays within a budget of nodes. The
|
|
10
|
+
// reader's own opens and closes outrank it.
|
|
11
|
+
//
|
|
12
|
+
// A function whose layer holds only it as a function (and kinds beside it) opens into
|
|
13
|
+
// the cluster of the function around it rather than into a cluster of its own, which
|
|
14
|
+
// is then named by the path of both ("topic_work › write_batches"): a chain of single
|
|
15
|
+
// calls is one box, as an editor's compact folders show a chain of single folders.
|
|
16
|
+
import { isPython } from '@contraagent/api';
|
|
17
|
+
import { cmpPasses, indexOf, loopsAt, passesAt, placeOf, push, shortName, startsWith } from './flow-index.js';
|
|
18
|
+
import { arrange, extentOf } from '@contraagent/elements/graph';
|
|
19
|
+
import { projectTasks, shapeOf } from './project.js';
|
|
20
|
+
/** Between a function's place and the id of an item drawn inside it. */
|
|
21
|
+
export const IN_SEP = '::';
|
|
22
|
+
/** The prefix of a function drawn open: `fx::<place>`. */
|
|
23
|
+
export const FLOW_BOX = 'fx::';
|
|
24
|
+
/** Where a function node is, across every layer: its layer and its id there (`<layer>/<id>`). */
|
|
25
|
+
export const placeKey = (layer, id) => `${layer.join('/')}/${id}`;
|
|
26
|
+
/** A failed or closed flow call (`raised`, `closed`). */
|
|
27
|
+
const stopped = (c) => c?.state === 'raised' || c?.state === 'closed';
|
|
28
|
+
/** Every function place under the layer `focus`, with what it holds. */
|
|
29
|
+
export function placeStats(ix, focus, live = false) {
|
|
30
|
+
const d0 = focus.length;
|
|
31
|
+
const out = new Map();
|
|
32
|
+
const raised = new Set();
|
|
33
|
+
if (ix.calls)
|
|
34
|
+
for (const c of ix.calls.values())
|
|
35
|
+
if (stopped(c))
|
|
36
|
+
raised.add(c.id);
|
|
37
|
+
for (const t of ix.tasks) {
|
|
38
|
+
if (!startsWith(t.path, focus))
|
|
39
|
+
continue;
|
|
40
|
+
const st = t.n.state;
|
|
41
|
+
const callErr = !!t.call && [...raised].some((r) => t.call === r || t.call.startsWith(`${r}.`));
|
|
42
|
+
let parent = null;
|
|
43
|
+
for (let d = d0; d < t.path.length; d++) {
|
|
44
|
+
const p = placeOf(t, d);
|
|
45
|
+
const layer = t.path.slice(0, d);
|
|
46
|
+
const key = placeKey(layer, p.id);
|
|
47
|
+
let s = out.get(key);
|
|
48
|
+
if (!s) {
|
|
49
|
+
const counts = { total: 0, done: 0, partial: 0, failed: 0, running: 0, pending: 0, skipped: 0, blocked: 0 };
|
|
50
|
+
const file = d > 0 ? (t.frames[d - 1]?.file ?? '') : '';
|
|
51
|
+
s = { key, layer, id: p.id, name: p.name, depth: d - d0, loops: p.loops, file, counts, tasks: 0, agent: 0, failed: 0, running: 0, stuck: 0, errors: false, kids: new Set(), fns: new Set(), parent };
|
|
52
|
+
out.set(key, s);
|
|
53
|
+
}
|
|
54
|
+
s.tasks += 1;
|
|
55
|
+
s.counts.total += 1;
|
|
56
|
+
s.counts[st] += 1;
|
|
57
|
+
if (!isPython(t.n))
|
|
58
|
+
s.agent += 1;
|
|
59
|
+
if (st === 'failed')
|
|
60
|
+
s.failed += 1;
|
|
61
|
+
else if (st === 'running')
|
|
62
|
+
s.running += 1;
|
|
63
|
+
else if (st === 'blocked' || (st === 'pending' && !live))
|
|
64
|
+
s.stuck += 1;
|
|
65
|
+
if (callErr)
|
|
66
|
+
s.errors = true;
|
|
67
|
+
const next = placeOf(t, d + 1);
|
|
68
|
+
s.kids.add(next.id);
|
|
69
|
+
if (next.type === 'flow')
|
|
70
|
+
s.fns.add(placeKey(t.path.slice(0, d + 1), next.id));
|
|
71
|
+
parent = key;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
/** A place's interest, before its distance: more tasks, and a failure, running work or a selection in it, more. */
|
|
77
|
+
export function interest(s, toward = new Set()) {
|
|
78
|
+
return Math.log2(1 + s.tasks) + (s.failed || s.errors ? 4 : 0) + (s.running ? 3 : 0) + (s.stuck ? 1.5 : 0) + (toward.has(s.key) ? 6 : 0);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Whether a place is worth opening on its own: it holds agent tasks, a failure, running
|
|
82
|
+
* work, work that will not run, or the selection. A place of finished Python steps says
|
|
83
|
+
* all it has in its node's count. (Furnas's threshold: only what is interesting enough is shown.)
|
|
84
|
+
*/
|
|
85
|
+
export const notable = (s, toward = new Set()) => s.agent > 0 || s.failed > 0 || s.errors || s.running > 0 || s.stuck > 0 || toward.has(s.key);
|
|
86
|
+
/** Its degree of interest: its interest less its distance from the layer shown. */
|
|
87
|
+
export const doi = (s, toward) => interest(s, toward) - 1.5 * s.depth;
|
|
88
|
+
/**
|
|
89
|
+
* The places to draw open: the reader's own, then, while the drawing stays within
|
|
90
|
+
* `budget` nodes, the rest in order of their degree of interest (a place's own
|
|
91
|
+
* functions become candidates once it is open), those `notable` only. A place opens only
|
|
92
|
+
* inside open places.
|
|
93
|
+
*/
|
|
94
|
+
export function chooseOpen(stats, rootIds, c) {
|
|
95
|
+
const open = new Set();
|
|
96
|
+
const auto = [];
|
|
97
|
+
const closed = c.closed ?? new Set();
|
|
98
|
+
const forced = c.open ?? new Set();
|
|
99
|
+
let visible = rootIds;
|
|
100
|
+
const cands = new Set([...stats.values()].filter((s) => s.parent === null).map((s) => s.key));
|
|
101
|
+
while (cands.size) {
|
|
102
|
+
let best = null;
|
|
103
|
+
let bestScore = -Infinity;
|
|
104
|
+
for (const k of cands) {
|
|
105
|
+
const s = stats.get(k);
|
|
106
|
+
const score = forced.has(k) ? Infinity : doi(s, c.toward);
|
|
107
|
+
if (score > bestScore) {
|
|
108
|
+
best = s;
|
|
109
|
+
bestScore = score;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (!best)
|
|
113
|
+
break;
|
|
114
|
+
cands.delete(best.key);
|
|
115
|
+
if (closed.has(best.key))
|
|
116
|
+
continue;
|
|
117
|
+
const cost = best.kids.size - 1;
|
|
118
|
+
if (!forced.has(best.key) && !c.all && (visible + cost > c.budget || !notable(best, c.toward)))
|
|
119
|
+
continue;
|
|
120
|
+
open.add(best.key);
|
|
121
|
+
if (!forced.has(best.key))
|
|
122
|
+
auto.push(best.key);
|
|
123
|
+
visible += cost;
|
|
124
|
+
for (const f of best.fns)
|
|
125
|
+
cands.add(f);
|
|
126
|
+
}
|
|
127
|
+
return { open, auto };
|
|
128
|
+
}
|
|
129
|
+
/** The places of interest for a selection: the place it is in or names, and every place around it. */
|
|
130
|
+
export function towardOf(sel, stats) {
|
|
131
|
+
const out = new Set();
|
|
132
|
+
let key = null;
|
|
133
|
+
if (sel.startsWith(FLOW_BOX))
|
|
134
|
+
key = sel.slice(FLOW_BOX.length).split('#')[0] ?? null;
|
|
135
|
+
else if (sel.includes(IN_SEP))
|
|
136
|
+
key = sel.slice(0, sel.lastIndexOf(IN_SEP));
|
|
137
|
+
for (let k = key; k !== null && stats.has(k); k = stats.get(k)?.parent ?? null)
|
|
138
|
+
out.add(k);
|
|
139
|
+
return out;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The layer `focus` of the plan with the places `chooseOpen` picks drawn open: a node
|
|
143
|
+
* per kind and per closed function, a cluster per open function (or one per chain of
|
|
144
|
+
* single functions), the loop boxes of every layer drawn, and the edges between the
|
|
145
|
+
* nodes the tasks are drawn in, whatever layer they are in.
|
|
146
|
+
*/
|
|
147
|
+
export function compound(plan, focus, choice) {
|
|
148
|
+
const ix = indexOf(plan);
|
|
149
|
+
const d0 = focus.length;
|
|
150
|
+
const inside = ix.tasks.filter((t) => startsWith(t.path, focus));
|
|
151
|
+
const stats = placeStats(ix, focus, choice.live);
|
|
152
|
+
const rootIds = new Set(inside.map((t) => placeOf(t, d0).id)).size;
|
|
153
|
+
const toward = choice.sel ? towardOf(choice.sel, stats) : choice.toward;
|
|
154
|
+
const { open, auto } = chooseOpen(stats, rootIds, { ...choice, toward });
|
|
155
|
+
let model = assemble(ix, focus, inside, stats, open);
|
|
156
|
+
// Too long a drawing: close again what was opened last on its own (the least interesting,
|
|
157
|
+
// and inside what was opened before it), until it spans `maxSpan` layers.
|
|
158
|
+
const span = (m) => extentOf(arrange(shapeOf(m))).span;
|
|
159
|
+
if (choice.maxSpan && !choice.all) {
|
|
160
|
+
while (auto.length && span(model) > choice.maxSpan) {
|
|
161
|
+
open.delete(auto.pop());
|
|
162
|
+
model = assemble(ix, focus, inside, stats, open);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return { model, open, stats };
|
|
166
|
+
}
|
|
167
|
+
/** The layer `focus` with the places `open` drawn open (`compound`). */
|
|
168
|
+
function assemble(ix, focus, inside, stats, open) {
|
|
169
|
+
const d0 = focus.length;
|
|
170
|
+
// Each task's container (the open place it is drawn in, '' for the layer shown) and its
|
|
171
|
+
// depth; and each container's tasks: every task under it, those of the places open in it too.
|
|
172
|
+
const containerOf = new Map();
|
|
173
|
+
const byContainer = new Map([['', []]]);
|
|
174
|
+
for (const t of inside) {
|
|
175
|
+
let d = d0;
|
|
176
|
+
let key = '';
|
|
177
|
+
byContainer.get('')?.push(t);
|
|
178
|
+
while (d < t.path.length) {
|
|
179
|
+
const k = placeKey(t.path.slice(0, d), placeOf(t, d).id);
|
|
180
|
+
if (!open.has(k))
|
|
181
|
+
break;
|
|
182
|
+
key = k;
|
|
183
|
+
push(byContainer, k, t);
|
|
184
|
+
d++;
|
|
185
|
+
}
|
|
186
|
+
containerOf.set(t.n.key, { key, depth: d });
|
|
187
|
+
}
|
|
188
|
+
// Each container's layer, projected from its tasks.
|
|
189
|
+
const proj = new Map();
|
|
190
|
+
const layerOfC = new Map();
|
|
191
|
+
for (const [k, ts] of byContainer) {
|
|
192
|
+
const s = stats.get(k);
|
|
193
|
+
const layer = s ? [...s.layer, s.name] : [...focus];
|
|
194
|
+
layerOfC.set(k, layer);
|
|
195
|
+
proj.set(k, projectTasks(ix, layer, ts));
|
|
196
|
+
}
|
|
197
|
+
const prefix = (k, id) => (k === '' ? id : `${k}${IN_SEP}${id}`);
|
|
198
|
+
// Where an open place's content goes: into the cluster of the place around it when that place's
|
|
199
|
+
// layer holds it as its only function, outside any loop box; else into a cluster of its own.
|
|
200
|
+
const ownNode = (k) => {
|
|
201
|
+
const s = stats.get(k);
|
|
202
|
+
const p = s ? proj.get(s.parent ?? '') : undefined;
|
|
203
|
+
return p?.model.nodes.find((n) => n.id === s?.id);
|
|
204
|
+
};
|
|
205
|
+
const merges = (k) => {
|
|
206
|
+
const s = stats.get(k);
|
|
207
|
+
if (!s || s.parent === null)
|
|
208
|
+
return false;
|
|
209
|
+
const p = proj.get(s.parent);
|
|
210
|
+
if (!p)
|
|
211
|
+
return false;
|
|
212
|
+
const fns = p.model.nodes.filter((n) => n.type === 'flow');
|
|
213
|
+
return fns.length === 1 && fns[0]?.id === s.id && !fns[0]?.box;
|
|
214
|
+
};
|
|
215
|
+
const clusterOf = (k) => (merges(k) ? clusterOf(stats.get(k).parent) : `${FLOW_BOX}${k}`);
|
|
216
|
+
const nodes = [];
|
|
217
|
+
const boxes = [];
|
|
218
|
+
const fns = new Map();
|
|
219
|
+
const unitsSeen = new Set();
|
|
220
|
+
for (const k of [...proj.keys()].sort((a, b) => (a === '' ? -1 : b === '' ? 1 : (stats.get(a)?.depth ?? 0) - (stats.get(b)?.depth ?? 0)))) {
|
|
221
|
+
const p = proj.get(k);
|
|
222
|
+
const layer = layerOfC.get(k);
|
|
223
|
+
const home = k === '' ? null : clusterOf(k);
|
|
224
|
+
if (k !== '') {
|
|
225
|
+
const own = ownNode(k);
|
|
226
|
+
const s = stats.get(k);
|
|
227
|
+
const node = own ? { ...own, id: prefix(s.parent ?? '', own.id) } : undefined;
|
|
228
|
+
const part = { id: `${FLOW_BOX}${k}`, key: k, node: node };
|
|
229
|
+
if (home === `${FLOW_BOX}${k}`) {
|
|
230
|
+
const parentBox = own?.box ? prefix(s.parent ?? '', own.box) : s.parent !== null ? clusterOf(s.parent) : null;
|
|
231
|
+
fns.set(home, { id: home, parent: parentBox, parts: [part] });
|
|
232
|
+
}
|
|
233
|
+
else
|
|
234
|
+
fns.get(home)?.parts.push(part);
|
|
235
|
+
}
|
|
236
|
+
for (const b of p.model.boxes) {
|
|
237
|
+
boxes.push({ ...b, id: prefix(k, b.id), parent: b.parent ? prefix(k, b.parent) : home, layer });
|
|
238
|
+
}
|
|
239
|
+
for (const n of p.model.nodes) {
|
|
240
|
+
if (n.type === 'flow' && open.has(placeKey(layer, n.id)))
|
|
241
|
+
continue;
|
|
242
|
+
nodes.push({ ...n, id: prefix(k, n.id), box: n.box ? prefix(k, n.box) : home, layer });
|
|
243
|
+
}
|
|
244
|
+
for (const u of p.model.units)
|
|
245
|
+
unitsSeen.add(u);
|
|
246
|
+
}
|
|
247
|
+
// Every node's marks in one unit order, the run's.
|
|
248
|
+
const units = [...unitsSeen].sort((a, b) => (ix.unitRank.get(a) ?? 0) - (ix.unitRank.get(b) ?? 0));
|
|
249
|
+
const unitsOf = new Map([...proj].map(([k, p]) => [k, p.model.units]));
|
|
250
|
+
for (const n of nodes) {
|
|
251
|
+
const k = n.id.includes(IN_SEP) ? n.id.slice(0, n.id.lastIndexOf(IN_SEP)) : '';
|
|
252
|
+
const local = unitsOf.get(k) ?? [];
|
|
253
|
+
if (!n.units.length)
|
|
254
|
+
continue;
|
|
255
|
+
const by = new Map(local.map((u, i) => [u, n.units[i] ?? null]));
|
|
256
|
+
n.units = units.map((u) => by.get(u) ?? null);
|
|
257
|
+
}
|
|
258
|
+
// Edges between the nodes the tasks are drawn in; from outside the layer shown, stubs.
|
|
259
|
+
const drawnOf = (t) => {
|
|
260
|
+
const c = containerOf.get(t.n.key);
|
|
261
|
+
return prefix(c.key, placeOf(t, c.depth).id);
|
|
262
|
+
};
|
|
263
|
+
const layerAt = (t) => t.path.slice(0, containerOf.get(t.n.key).depth);
|
|
264
|
+
const inOrder = new Set();
|
|
265
|
+
const pairs = new Map();
|
|
266
|
+
const stubs = new Map();
|
|
267
|
+
for (const t of inside) {
|
|
268
|
+
const to = drawnOf(t);
|
|
269
|
+
const link = (dep, type) => {
|
|
270
|
+
const o = ix.byKey.get(dep);
|
|
271
|
+
if (!o)
|
|
272
|
+
return;
|
|
273
|
+
if (startsWith(o.path, focus)) {
|
|
274
|
+
const from = drawnOf(o);
|
|
275
|
+
if (from === to) {
|
|
276
|
+
if (type === 'after')
|
|
277
|
+
inOrder.add(to);
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
// The loops that matter are those of the deepest layer both are drawn in.
|
|
281
|
+
const la = layerAt(o);
|
|
282
|
+
const lb = layerAt(t);
|
|
283
|
+
let d = 0;
|
|
284
|
+
while (d < la.length && d < lb.length && la[d] === lb[d])
|
|
285
|
+
d++;
|
|
286
|
+
const a = loopsAt(o, d);
|
|
287
|
+
const b = loopsAt(t, d);
|
|
288
|
+
let k = 0;
|
|
289
|
+
while (k < a.length && a[k] === b[k])
|
|
290
|
+
k++;
|
|
291
|
+
const same = cmpPasses(passesAt(o, d).slice(0, k), passesAt(t, d).slice(0, k)) === 0;
|
|
292
|
+
const key = `${from}\u0000${to}\u0000${type}`;
|
|
293
|
+
const e = pairs.get(key) ?? pairs.set(key, { from, to, type, tasks: new Set(), samePass: false }).get(key);
|
|
294
|
+
e?.tasks.add(t.n.key);
|
|
295
|
+
if (e && same)
|
|
296
|
+
e.samePass = true;
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
let c = 0;
|
|
300
|
+
while (c < d0 && o.path[c] === focus[c])
|
|
301
|
+
c++;
|
|
302
|
+
const p = placeOf(o, c);
|
|
303
|
+
const s = { id: `stub:${c}:${p.id}`, label: p.type === 'kind' ? (ix.labels.get(p.name) ?? p.name) : shortName(p.name) };
|
|
304
|
+
const sk = `${s.id}\u0000${to}\u0000${type}`;
|
|
305
|
+
(stubs.get(sk) ?? stubs.set(sk, { ...s, to, type, tasks: new Set() }).get(sk))?.tasks.add(t.n.key);
|
|
306
|
+
};
|
|
307
|
+
for (const dep of t.n.after ?? [])
|
|
308
|
+
link(dep, 'after');
|
|
309
|
+
for (const dep of t.from)
|
|
310
|
+
link(dep, 'created');
|
|
311
|
+
}
|
|
312
|
+
for (const n of nodes)
|
|
313
|
+
n.inOrder = inOrder.has(n.id);
|
|
314
|
+
const edges = [...pairs.values()]
|
|
315
|
+
.filter((e) => e.type === 'after' || !pairs.has(`${e.from}\u0000${e.to}\u0000after`))
|
|
316
|
+
.map((e) => ({ from: e.from, to: e.to, tasks: e.tasks.size, type: e.type, samePass: e.samePass, back: false }));
|
|
317
|
+
const stubList = [...stubs.values()]
|
|
318
|
+
.filter((s) => s.type === 'after' || !stubs.has(`${s.id}\u0000${s.to}\u0000after`))
|
|
319
|
+
.map((s) => ({ id: s.id, label: s.label, to: s.to, tasks: s.tasks.size, type: s.type }));
|
|
320
|
+
return { path: [...focus], nodes, boxes, fns: [...fns.values()], edges, stubs: stubList, units };
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=compound.js.map
|