@contraagent/ui 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -2
- package/custom-elements.json +7084 -0
- package/dist/adapters/check-rows.d.ts +18 -0
- package/dist/adapters/check-rows.d.ts.map +1 -0
- package/dist/adapters/check-rows.js +75 -0
- package/dist/adapters/check-rows.js.map +1 -0
- package/dist/adapters/filters.d.ts +29 -0
- package/dist/adapters/filters.d.ts.map +1 -0
- package/dist/adapters/filters.js +74 -0
- package/dist/adapters/filters.js.map +1 -0
- package/dist/adapters/graph/compound.d.ts +93 -0
- package/dist/adapters/graph/compound.d.ts.map +1 -0
- package/dist/adapters/graph/compound.js +322 -0
- package/dist/adapters/graph/compound.js.map +1 -0
- package/dist/adapters/graph/flow-index.d.ts +54 -0
- package/dist/adapters/graph/flow-index.d.ts.map +1 -0
- package/dist/adapters/graph/flow-index.js +129 -0
- package/dist/adapters/graph/flow-index.js.map +1 -0
- package/dist/adapters/graph/highlight.d.ts +14 -0
- package/dist/adapters/graph/highlight.d.ts.map +1 -0
- package/dist/adapters/graph/highlight.js +33 -0
- package/dist/adapters/graph/highlight.js.map +1 -0
- package/dist/adapters/graph/input.d.ts +50 -0
- package/dist/adapters/graph/input.d.ts.map +1 -0
- package/dist/adapters/graph/input.js +201 -0
- package/dist/adapters/graph/input.js.map +1 -0
- package/dist/adapters/graph/layer.d.ts +33 -0
- package/dist/adapters/graph/layer.d.ts.map +1 -0
- package/dist/adapters/graph/layer.js +94 -0
- package/dist/adapters/graph/layer.js.map +1 -0
- package/dist/adapters/graph/matrix.d.ts +62 -0
- package/dist/adapters/graph/matrix.d.ts.map +1 -0
- package/dist/adapters/graph/matrix.js +96 -0
- package/dist/adapters/graph/matrix.js.map +1 -0
- package/dist/adapters/graph/project.d.ts +49 -0
- package/dist/adapters/graph/project.d.ts.map +1 -0
- package/dist/adapters/graph/project.js +319 -0
- package/dist/adapters/graph/project.js.map +1 -0
- package/dist/adapters/graph/selection.d.ts +31 -0
- package/dist/adapters/graph/selection.d.ts.map +1 -0
- package/dist/adapters/graph/selection.js +48 -0
- package/dist/adapters/graph/selection.js.map +1 -0
- package/dist/adapters/graph/states.d.ts +6 -0
- package/dist/adapters/graph/states.d.ts.map +1 -0
- package/dist/adapters/graph/states.js +5 -0
- package/dist/adapters/graph/states.js.map +1 -0
- package/dist/adapters/graph/types.d.ts +141 -0
- package/dist/adapters/graph/types.d.ts.map +1 -0
- package/dist/adapters/graph/types.js +3 -0
- package/dist/adapters/graph/types.js.map +1 -0
- package/dist/adapters/graph/words.d.ts +48 -0
- package/dist/adapters/graph/words.d.ts.map +1 -0
- package/dist/adapters/graph/words.js +128 -0
- package/dist/adapters/graph/words.js.map +1 -0
- package/dist/adapters/index.d.ts +18 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +23 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/journal-columns.d.ts +21 -0
- package/dist/adapters/journal-columns.d.ts.map +1 -0
- package/dist/adapters/journal-columns.js +179 -0
- package/dist/adapters/journal-columns.js.map +1 -0
- package/dist/adapters/kpi-tiles.d.ts +47 -0
- package/dist/adapters/kpi-tiles.d.ts.map +1 -0
- package/dist/adapters/kpi-tiles.js +173 -0
- package/dist/adapters/kpi-tiles.js.map +1 -0
- package/dist/adapters/lanes.d.ts +31 -0
- package/dist/adapters/lanes.d.ts.map +1 -0
- package/dist/adapters/lanes.js +75 -0
- package/dist/adapters/lanes.js.map +1 -0
- package/dist/adapters/model-shares.d.ts +27 -0
- package/dist/adapters/model-shares.d.ts.map +1 -0
- package/dist/adapters/model-shares.js +52 -0
- package/dist/adapters/model-shares.js.map +1 -0
- package/dist/adapters/panel-body.d.ts +20 -0
- package/dist/adapters/panel-body.d.ts.map +1 -0
- package/dist/adapters/panel-body.js +63 -0
- package/dist/adapters/panel-body.js.map +1 -0
- package/dist/adapters/preflight.d.ts +12 -0
- package/dist/adapters/preflight.d.ts.map +1 -0
- package/dist/adapters/preflight.js +15 -0
- package/dist/adapters/preflight.js.map +1 -0
- package/dist/adapters/task-columns.d.ts +19 -0
- package/dist/adapters/task-columns.d.ts.map +1 -0
- package/dist/adapters/task-columns.js +107 -0
- package/dist/adapters/task-columns.js.map +1 -0
- package/dist/adapters/transcript/index.d.ts +6 -0
- package/dist/adapters/transcript/index.d.ts.map +1 -0
- package/dist/adapters/transcript/index.js +8 -0
- package/dist/adapters/transcript/index.js.map +1 -0
- package/dist/adapters/transcript/model.d.ts +42 -0
- package/dist/adapters/transcript/model.d.ts.map +1 -0
- package/dist/adapters/transcript/model.js +128 -0
- package/dist/adapters/transcript/model.js.map +1 -0
- package/dist/adapters/transcript/rounds.d.ts +15 -0
- package/dist/adapters/transcript/rounds.d.ts.map +1 -0
- package/dist/adapters/transcript/rounds.js +74 -0
- package/dist/adapters/transcript/rounds.js.map +1 -0
- package/dist/adapters/transcript/sections.d.ts +18 -0
- package/dist/adapters/transcript/sections.d.ts.map +1 -0
- package/dist/adapters/transcript/sections.js +69 -0
- package/dist/adapters/transcript/sections.js.map +1 -0
- package/dist/adapters/transcript/web.d.ts +12 -0
- package/dist/adapters/transcript/web.d.ts.map +1 -0
- package/dist/adapters/transcript/web.js +39 -0
- package/dist/adapters/transcript/web.js.map +1 -0
- package/dist/adapters/transcript/who.d.ts +15 -0
- package/dist/adapters/transcript/who.d.ts.map +1 -0
- package/dist/adapters/transcript/who.js +42 -0
- package/dist/adapters/transcript/who.js.map +1 -0
- package/dist/adapters/trends.d.ts +11 -0
- package/dist/adapters/trends.d.ts.map +1 -0
- package/dist/adapters/trends.js +316 -0
- package/dist/adapters/trends.js.map +1 -0
- package/dist/contraagent-ui.js +985 -0
- package/dist/controllers/locale.d.ts +25 -0
- package/dist/controllers/locale.d.ts.map +1 -0
- package/dist/controllers/locale.js +33 -0
- package/dist/controllers/locale.js.map +1 -0
- package/dist/controllers/shortcuts.d.ts +29 -0
- package/dist/controllers/shortcuts.d.ts.map +1 -0
- package/dist/controllers/shortcuts.js +51 -0
- package/dist/controllers/shortcuts.js.map +1 -0
- package/dist/controllers/stream.d.ts +41 -0
- package/dist/controllers/stream.d.ts.map +1 -0
- package/dist/controllers/stream.js +90 -0
- package/dist/controllers/stream.js.map +1 -0
- package/dist/controllers/task-detail.d.ts +22 -0
- package/dist/controllers/task-detail.d.ts.map +1 -0
- package/dist/controllers/task-detail.js +50 -0
- package/dist/controllers/task-detail.js.map +1 -0
- package/dist/controllers/theme.d.ts +32 -0
- package/dist/controllers/theme.d.ts.map +1 -0
- package/dist/controllers/theme.js +56 -0
- package/dist/controllers/theme.js.map +1 -0
- package/dist/core/clock.d.ts +20 -0
- package/dist/core/clock.d.ts.map +1 -0
- package/dist/core/clock.js +45 -0
- package/dist/core/clock.js.map +1 -0
- package/dist/core/events.d.ts +107 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +5 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/i18n.d.ts +21 -0
- package/dist/core/i18n.d.ts.map +1 -0
- package/dist/core/i18n.js +71 -0
- package/dist/core/i18n.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/memory.d.ts +51 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +174 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/route.d.ts +62 -0
- package/dist/core/route.d.ts.map +1 -0
- package/dist/core/route.js +143 -0
- package/dist/core/route.js.map +1 -0
- package/dist/core/router.d.ts +27 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +57 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/scroll.d.ts +21 -0
- package/dist/core/scroll.d.ts.map +1 -0
- package/dist/core/scroll.js +74 -0
- package/dist/core/scroll.js.map +1 -0
- package/dist/core/view-route.d.ts +62 -0
- package/dist/core/view-route.d.ts.map +1 -0
- package/dist/core/view-route.js +143 -0
- package/dist/core/view-route.js.map +1 -0
- package/dist/core/view-router.d.ts +27 -0
- package/dist/core/view-router.d.ts.map +1 -0
- package/dist/core/view-router.js +57 -0
- package/dist/core/view-router.js.map +1 -0
- package/dist/define/all.d.ts +13 -0
- package/dist/define/all.d.ts.map +1 -0
- package/dist/define/all.js +14 -0
- package/dist/define/all.js.map +1 -0
- package/dist/define/contracts.d.ts +2 -0
- package/dist/define/contracts.d.ts.map +1 -0
- package/dist/define/contracts.js +3 -0
- package/dist/define/contracts.js.map +1 -0
- package/dist/define/definitions.d.ts +3 -0
- package/dist/define/definitions.d.ts.map +1 -0
- package/dist/define/definitions.js +4 -0
- package/dist/define/definitions.js.map +1 -0
- package/dist/define/journal-table.d.ts +2 -0
- package/dist/define/journal-table.d.ts.map +1 -0
- package/dist/define/journal-table.js +3 -0
- package/dist/define/journal-table.js.map +1 -0
- package/dist/define/kpis.d.ts +2 -0
- package/dist/define/kpis.d.ts.map +1 -0
- package/dist/define/kpis.js +3 -0
- package/dist/define/kpis.js.map +1 -0
- package/dist/define/monitor.d.ts +2 -0
- package/dist/define/monitor.d.ts.map +1 -0
- package/dist/define/monitor.js +3 -0
- package/dist/define/monitor.js.map +1 -0
- package/dist/define/overview.d.ts +2 -0
- package/dist/define/overview.d.ts.map +1 -0
- package/dist/define/overview.js +3 -0
- package/dist/define/overview.js.map +1 -0
- package/dist/define/pipeline-graph.d.ts +2 -0
- package/dist/define/pipeline-graph.d.ts.map +1 -0
- package/dist/define/pipeline-graph.js +3 -0
- package/dist/define/pipeline-graph.js.map +1 -0
- package/dist/define/procs.d.ts +3 -0
- package/dist/define/procs.d.ts.map +1 -0
- package/dist/define/procs.js +4 -0
- package/dist/define/procs.js.map +1 -0
- package/dist/define/task-table.d.ts +2 -0
- package/dist/define/task-table.d.ts.map +1 -0
- package/dist/define/task-table.js +3 -0
- package/dist/define/task-table.js.map +1 -0
- package/dist/define/task-view.d.ts +2 -0
- package/dist/define/task-view.d.ts.map +1 -0
- package/dist/define/task-view.js +3 -0
- package/dist/define/task-view.js.map +1 -0
- package/dist/define/timeline.d.ts +2 -0
- package/dist/define/timeline.d.ts.map +1 -0
- package/dist/define/timeline.js +3 -0
- package/dist/define/timeline.js.map +1 -0
- package/dist/define/transcript.d.ts +2 -0
- package/dist/define/transcript.d.ts.map +1 -0
- package/dist/define/transcript.js +3 -0
- package/dist/define/transcript.js.map +1 -0
- package/dist/elements/lists/ca-contracts.d.ts +46 -0
- package/dist/elements/lists/ca-contracts.d.ts.map +1 -0
- package/dist/elements/lists/ca-contracts.js +199 -0
- package/dist/elements/lists/ca-contracts.js.map +1 -0
- package/dist/elements/lists/ca-definitions.d.ts +41 -0
- package/dist/elements/lists/ca-definitions.d.ts.map +1 -0
- package/dist/elements/lists/ca-definitions.js +182 -0
- package/dist/elements/lists/ca-definitions.js.map +1 -0
- package/dist/elements/lists/ca-journal-table.d.ts +37 -0
- package/dist/elements/lists/ca-journal-table.d.ts.map +1 -0
- package/dist/elements/lists/ca-journal-table.js +170 -0
- package/dist/elements/lists/ca-journal-table.js.map +1 -0
- package/dist/elements/lists/ca-panel-body.d.ts +29 -0
- package/dist/elements/lists/ca-panel-body.d.ts.map +1 -0
- package/dist/elements/lists/ca-panel-body.js +144 -0
- package/dist/elements/lists/ca-panel-body.js.map +1 -0
- package/dist/elements/lists/ca-panel-view.d.ts +21 -0
- package/dist/elements/lists/ca-panel-view.d.ts.map +1 -0
- package/dist/elements/lists/ca-panel-view.js +59 -0
- package/dist/elements/lists/ca-panel-view.js.map +1 -0
- package/dist/elements/lists/ca-proc-tree.d.ts +16 -0
- package/dist/elements/lists/ca-proc-tree.d.ts.map +1 -0
- package/dist/elements/lists/ca-proc-tree.js +63 -0
- package/dist/elements/lists/ca-proc-tree.js.map +1 -0
- package/dist/elements/lists/ca-procs-view.d.ts +27 -0
- package/dist/elements/lists/ca-procs-view.d.ts.map +1 -0
- package/dist/elements/lists/ca-procs-view.js +91 -0
- package/dist/elements/lists/ca-procs-view.js.map +1 -0
- package/dist/elements/lists/ca-task-table.d.ts +33 -0
- package/dist/elements/lists/ca-task-table.d.ts.map +1 -0
- package/dist/elements/lists/ca-task-table.js +115 -0
- package/dist/elements/lists/ca-task-table.js.map +1 -0
- package/dist/elements/lists/filters.d.ts +28 -0
- package/dist/elements/lists/filters.d.ts.map +1 -0
- package/dist/elements/lists/filters.js +71 -0
- package/dist/elements/lists/filters.js.map +1 -0
- package/dist/elements/lists/index.d.ts +9 -0
- package/dist/elements/lists/index.d.ts.map +1 -0
- package/dist/elements/lists/index.js +9 -0
- package/dist/elements/lists/index.js.map +1 -0
- package/dist/elements/overview/ca-kpis.d.ts +32 -0
- package/dist/elements/overview/ca-kpis.d.ts.map +1 -0
- package/dist/elements/overview/ca-kpis.js +62 -0
- package/dist/elements/overview/ca-kpis.js.map +1 -0
- package/dist/elements/overview/ca-model-usage.d.ts +25 -0
- package/dist/elements/overview/ca-model-usage.d.ts.map +1 -0
- package/dist/elements/overview/ca-model-usage.js +118 -0
- package/dist/elements/overview/ca-model-usage.js.map +1 -0
- package/dist/elements/overview/ca-overview.d.ts +66 -0
- package/dist/elements/overview/ca-overview.d.ts.map +1 -0
- package/dist/elements/overview/ca-overview.js +456 -0
- package/dist/elements/overview/ca-overview.js.map +1 -0
- package/dist/elements/overview/ca-pipeline-graph.d.ts +211 -0
- package/dist/elements/overview/ca-pipeline-graph.d.ts.map +1 -0
- package/dist/elements/overview/ca-pipeline-graph.js +616 -0
- package/dist/elements/overview/ca-pipeline-graph.js.map +1 -0
- package/dist/elements/overview/ca-pipeline-progress.d.ts +17 -0
- package/dist/elements/overview/ca-pipeline-progress.d.ts.map +1 -0
- package/dist/elements/overview/ca-pipeline-progress.js +119 -0
- package/dist/elements/overview/ca-pipeline-progress.js.map +1 -0
- package/dist/elements/overview/ca-plan-matrix.d.ts +27 -0
- package/dist/elements/overview/ca-plan-matrix.d.ts.map +1 -0
- package/dist/elements/overview/ca-plan-matrix.js +113 -0
- package/dist/elements/overview/ca-plan-matrix.js.map +1 -0
- package/dist/elements/overview/ca-quota.d.ts +42 -0
- package/dist/elements/overview/ca-quota.d.ts.map +1 -0
- package/dist/elements/overview/ca-quota.js +179 -0
- package/dist/elements/overview/ca-quota.js.map +1 -0
- package/dist/elements/overview/ca-run-driver.d.ts +33 -0
- package/dist/elements/overview/ca-run-driver.d.ts.map +1 -0
- package/dist/elements/overview/ca-run-driver.js +146 -0
- package/dist/elements/overview/ca-run-driver.js.map +1 -0
- package/dist/elements/overview/ca-spend-breakdown.d.ts +24 -0
- package/dist/elements/overview/ca-spend-breakdown.d.ts.map +1 -0
- package/dist/elements/overview/ca-spend-breakdown.js +108 -0
- package/dist/elements/overview/ca-spend-breakdown.js.map +1 -0
- package/dist/elements/overview/ca-timeline.d.ts +28 -0
- package/dist/elements/overview/ca-timeline.d.ts.map +1 -0
- package/dist/elements/overview/ca-timeline.js +72 -0
- package/dist/elements/overview/ca-timeline.js.map +1 -0
- package/dist/elements/overview/ca-workers.d.ts +23 -0
- package/dist/elements/overview/ca-workers.d.ts.map +1 -0
- package/dist/elements/overview/ca-workers.js +86 -0
- package/dist/elements/overview/ca-workers.js.map +1 -0
- package/dist/elements/overview/flow-types.d.ts +2 -0
- package/dist/elements/overview/flow-types.d.ts.map +1 -0
- package/dist/elements/overview/flow-types.js +2 -0
- package/dist/elements/overview/flow-types.js.map +1 -0
- package/dist/elements/overview/graph/arrange.d.ts +16 -0
- package/dist/elements/overview/graph/arrange.d.ts.map +1 -0
- package/dist/elements/overview/graph/arrange.js +152 -0
- package/dist/elements/overview/graph/arrange.js.map +1 -0
- package/dist/elements/overview/graph/card.d.ts +64 -0
- package/dist/elements/overview/graph/card.d.ts.map +1 -0
- package/dist/elements/overview/graph/card.js +160 -0
- package/dist/elements/overview/graph/card.js.map +1 -0
- package/dist/elements/overview/graph/flow-index.d.ts +52 -0
- package/dist/elements/overview/graph/flow-index.d.ts.map +1 -0
- package/dist/elements/overview/graph/flow-index.js +121 -0
- package/dist/elements/overview/graph/flow-index.js.map +1 -0
- package/dist/elements/overview/graph/highlight.d.ts +14 -0
- package/dist/elements/overview/graph/highlight.d.ts.map +1 -0
- package/dist/elements/overview/graph/highlight.js +33 -0
- package/dist/elements/overview/graph/highlight.js.map +1 -0
- package/dist/elements/overview/graph/layer.d.ts +32 -0
- package/dist/elements/overview/graph/layer.d.ts.map +1 -0
- package/dist/elements/overview/graph/layer.js +92 -0
- package/dist/elements/overview/graph/layer.js.map +1 -0
- package/dist/elements/overview/graph/layout.d.ts +80 -0
- package/dist/elements/overview/graph/layout.d.ts.map +1 -0
- package/dist/elements/overview/graph/layout.js +261 -0
- package/dist/elements/overview/graph/layout.js.map +1 -0
- package/dist/elements/overview/graph/marks.d.ts +18 -0
- package/dist/elements/overview/graph/marks.d.ts.map +1 -0
- package/dist/elements/overview/graph/marks.js +17 -0
- package/dist/elements/overview/graph/marks.js.map +1 -0
- package/dist/elements/overview/graph/matrix.d.ts +58 -0
- package/dist/elements/overview/graph/matrix.d.ts.map +1 -0
- package/dist/elements/overview/graph/matrix.js +93 -0
- package/dist/elements/overview/graph/matrix.js.map +1 -0
- package/dist/elements/overview/graph/nav.d.ts +15 -0
- package/dist/elements/overview/graph/nav.d.ts.map +1 -0
- package/dist/elements/overview/graph/nav.js +80 -0
- package/dist/elements/overview/graph/nav.js.map +1 -0
- package/dist/elements/overview/graph/pan-zoom.d.ts +83 -0
- package/dist/elements/overview/graph/pan-zoom.d.ts.map +1 -0
- package/dist/elements/overview/graph/pan-zoom.js +189 -0
- package/dist/elements/overview/graph/pan-zoom.js.map +1 -0
- package/dist/elements/overview/graph/paths.d.ts +9 -0
- package/dist/elements/overview/graph/paths.d.ts.map +1 -0
- package/dist/elements/overview/graph/paths.js +44 -0
- package/dist/elements/overview/graph/paths.js.map +1 -0
- package/dist/elements/overview/graph/place-card.d.ts +36 -0
- package/dist/elements/overview/graph/place-card.d.ts.map +1 -0
- package/dist/elements/overview/graph/place-card.js +68 -0
- package/dist/elements/overview/graph/place-card.js.map +1 -0
- package/dist/elements/overview/graph/project.d.ts +31 -0
- package/dist/elements/overview/graph/project.d.ts.map +1 -0
- package/dist/elements/overview/graph/project.js +455 -0
- package/dist/elements/overview/graph/project.js.map +1 -0
- package/dist/elements/overview/graph/selection.d.ts +31 -0
- package/dist/elements/overview/graph/selection.d.ts.map +1 -0
- package/dist/elements/overview/graph/selection.js +44 -0
- package/dist/elements/overview/graph/selection.js.map +1 -0
- package/dist/elements/overview/graph/states.d.ts +6 -0
- package/dist/elements/overview/graph/states.d.ts.map +1 -0
- package/dist/elements/overview/graph/states.js +5 -0
- package/dist/elements/overview/graph/states.js.map +1 -0
- package/dist/elements/overview/graph/types.d.ts +124 -0
- package/dist/elements/overview/graph/types.d.ts.map +1 -0
- package/dist/elements/overview/graph/types.js +3 -0
- package/dist/elements/overview/graph/types.js.map +1 -0
- package/dist/elements/overview/graph/view.d.ts +16 -0
- package/dist/elements/overview/graph/view.d.ts.map +1 -0
- package/dist/elements/overview/graph/view.js +20 -0
- package/dist/elements/overview/graph/view.js.map +1 -0
- package/dist/elements/overview/index.d.ts +10 -0
- package/dist/elements/overview/index.d.ts.map +1 -0
- package/dist/elements/overview/index.js +10 -0
- package/dist/elements/overview/index.js.map +1 -0
- package/dist/elements/overview/kpis-model.d.ts +31 -0
- package/dist/elements/overview/kpis-model.d.ts.map +1 -0
- package/dist/elements/overview/kpis-model.js +30 -0
- package/dist/elements/overview/kpis-model.js.map +1 -0
- package/dist/elements/overview/logic.d.ts +442 -0
- package/dist/elements/overview/logic.d.ts.map +1 -0
- package/dist/elements/overview/logic.js +1431 -0
- package/dist/elements/overview/logic.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/actions.d.ts +16 -0
- package/dist/elements/overview/pipeline-graph/actions.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/actions.js +42 -0
- package/dist/elements/overview/pipeline-graph/actions.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/crumbs.d.ts +15 -0
- package/dist/elements/overview/pipeline-graph/crumbs.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/crumbs.js +70 -0
- package/dist/elements/overview/pipeline-graph/crumbs.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/dag.d.ts +4 -0
- package/dist/elements/overview/pipeline-graph/dag.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/dag.js +259 -0
- package/dist/elements/overview/pipeline-graph/dag.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/host.d.ts +24 -0
- package/dist/elements/overview/pipeline-graph/host.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/host.js +2 -0
- package/dist/elements/overview/pipeline-graph/host.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/icons.d.ts +5 -0
- package/dist/elements/overview/pipeline-graph/icons.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/icons.js +13 -0
- package/dist/elements/overview/pipeline-graph/icons.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/inspector.d.ts +5 -0
- package/dist/elements/overview/pipeline-graph/inspector.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/inspector.js +100 -0
- package/dist/elements/overview/pipeline-graph/inspector.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/legend.d.ts +9 -0
- package/dist/elements/overview/pipeline-graph/legend.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/legend.js +59 -0
- package/dist/elements/overview/pipeline-graph/legend.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/matrix.d.ts +4 -0
- package/dist/elements/overview/pipeline-graph/matrix.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/matrix.js +193 -0
- package/dist/elements/overview/pipeline-graph/matrix.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/outline.d.ts +53 -0
- package/dist/elements/overview/pipeline-graph/outline.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/outline.js +111 -0
- package/dist/elements/overview/pipeline-graph/outline.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/strings.d.ts +11 -0
- package/dist/elements/overview/pipeline-graph/strings.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/strings.js +49 -0
- package/dist/elements/overview/pipeline-graph/strings.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/styles.d.ts +4 -0
- package/dist/elements/overview/pipeline-graph/styles.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/styles.js +96 -0
- package/dist/elements/overview/pipeline-graph/styles.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/table.d.ts +11 -0
- package/dist/elements/overview/pipeline-graph/table.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/table.js +74 -0
- package/dist/elements/overview/pipeline-graph/table.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/tools.d.ts +5 -0
- package/dist/elements/overview/pipeline-graph/tools.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/tools.js +48 -0
- package/dist/elements/overview/pipeline-graph/tools.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/words.d.ts +45 -0
- package/dist/elements/overview/pipeline-graph/words.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/words.js +108 -0
- package/dist/elements/overview/pipeline-graph/words.js.map +1 -0
- package/dist/elements/overview/place-card.d.ts +36 -0
- package/dist/elements/overview/place-card.d.ts.map +1 -0
- package/dist/elements/overview/place-card.js +68 -0
- package/dist/elements/overview/place-card.js.map +1 -0
- package/dist/elements/overview/timeline-model.d.ts +44 -0
- package/dist/elements/overview/timeline-model.d.ts.map +1 -0
- package/dist/elements/overview/timeline-model.js +53 -0
- package/dist/elements/overview/timeline-model.js.map +1 -0
- package/dist/elements/shared/ca-count.d.ts +17 -0
- package/dist/elements/shared/ca-count.d.ts.map +1 -0
- package/dist/elements/shared/ca-count.js +59 -0
- package/dist/elements/shared/ca-count.js.map +1 -0
- package/dist/elements/shared/ca-definition.d.ts +26 -0
- package/dist/elements/shared/ca-definition.d.ts.map +1 -0
- package/dist/elements/shared/ca-definition.js +202 -0
- package/dist/elements/shared/ca-definition.js.map +1 -0
- package/dist/elements/shared/ca-elapsed.d.ts +14 -0
- package/dist/elements/shared/ca-elapsed.d.ts.map +1 -0
- package/dist/elements/shared/ca-elapsed.js +33 -0
- package/dist/elements/shared/ca-elapsed.js.map +1 -0
- package/dist/elements/shared/ca-json-tree.d.ts +16 -0
- package/dist/elements/shared/ca-json-tree.d.ts.map +1 -0
- package/dist/elements/shared/ca-json-tree.js +52 -0
- package/dist/elements/shared/ca-json-tree.js.map +1 -0
- package/dist/elements/shared/ca-markdown.d.ts +19 -0
- package/dist/elements/shared/ca-markdown.d.ts.map +1 -0
- package/dist/elements/shared/ca-markdown.js +59 -0
- package/dist/elements/shared/ca-markdown.js.map +1 -0
- package/dist/elements/shared/contract-parts.d.ts +35 -0
- package/dist/elements/shared/contract-parts.d.ts.map +1 -0
- package/dist/elements/shared/contract-parts.js +151 -0
- package/dist/elements/shared/contract-parts.js.map +1 -0
- package/dist/elements/shared/fact-line.d.ts +4 -0
- package/dist/elements/shared/fact-line.d.ts.map +1 -0
- package/dist/elements/shared/fact-line.js +8 -0
- package/dist/elements/shared/fact-line.js.map +1 -0
- package/dist/elements/shared/file-card.d.ts +17 -0
- package/dist/elements/shared/file-card.d.ts.map +1 -0
- package/dist/elements/shared/file-card.js +37 -0
- package/dist/elements/shared/file-card.js.map +1 -0
- package/dist/elements/shared/prompt-text.d.ts +5 -0
- package/dist/elements/shared/prompt-text.d.ts.map +1 -0
- package/dist/elements/shared/prompt-text.js +13 -0
- package/dist/elements/shared/prompt-text.js.map +1 -0
- package/dist/elements/shared/task-chip.d.ts +10 -0
- package/dist/elements/shared/task-chip.d.ts.map +1 -0
- package/dist/elements/shared/task-chip.js +19 -0
- package/dist/elements/shared/task-chip.js.map +1 -0
- package/dist/elements/shell/ca-clock.d.ts +13 -0
- package/dist/elements/shell/ca-clock.d.ts.map +1 -0
- package/dist/elements/shell/ca-clock.js +30 -0
- package/dist/elements/shell/ca-clock.js.map +1 -0
- package/dist/elements/shell/ca-hosts.d.ts +21 -0
- package/dist/elements/shell/ca-hosts.d.ts.map +1 -0
- package/dist/elements/shell/ca-hosts.js +97 -0
- package/dist/elements/shell/ca-hosts.js.map +1 -0
- package/dist/elements/shell/ca-monitor.d.ts +180 -0
- package/dist/elements/shell/ca-monitor.d.ts.map +1 -0
- package/dist/elements/shell/ca-monitor.js +547 -0
- package/dist/elements/shell/ca-monitor.js.map +1 -0
- package/dist/elements/shell/ca-run-picker.d.ts +71 -0
- package/dist/elements/shell/ca-run-picker.d.ts.map +1 -0
- package/dist/elements/shell/ca-run-picker.js +313 -0
- package/dist/elements/shell/ca-run-picker.js.map +1 -0
- package/dist/elements/shell/ca-theme-switch.d.ts +36 -0
- package/dist/elements/shell/ca-theme-switch.d.ts.map +1 -0
- package/dist/elements/shell/ca-theme-switch.js +186 -0
- package/dist/elements/shell/ca-theme-switch.js.map +1 -0
- package/dist/elements/shell/ca-toasts.d.ts +23 -0
- package/dist/elements/shell/ca-toasts.d.ts.map +1 -0
- package/dist/elements/shell/ca-toasts.js +88 -0
- package/dist/elements/shell/ca-toasts.js.map +1 -0
- package/dist/elements/shell/header.d.ts +13 -0
- package/dist/elements/shell/header.d.ts.map +1 -0
- package/dist/elements/shell/header.js +38 -0
- package/dist/elements/shell/header.js.map +1 -0
- package/dist/elements/shell/styles.d.ts +2 -0
- package/dist/elements/shell/styles.d.ts.map +1 -0
- package/dist/elements/shell/styles.js +72 -0
- package/dist/elements/shell/styles.js.map +1 -0
- package/dist/elements/shell/tabs.d.ts +32 -0
- package/dist/elements/shell/tabs.d.ts.map +1 -0
- package/dist/elements/shell/tabs.js +125 -0
- package/dist/elements/shell/tabs.js.map +1 -0
- package/dist/elements/shell/views.d.ts +27 -0
- package/dist/elements/shell/views.d.ts.map +1 -0
- package/dist/elements/shell/views.js +55 -0
- package/dist/elements/shell/views.js.map +1 -0
- package/dist/elements/task/ca-task-view.d.ts +55 -0
- package/dist/elements/task/ca-task-view.d.ts.map +1 -0
- package/dist/elements/task/ca-task-view.js +199 -0
- package/dist/elements/task/ca-task-view.js.map +1 -0
- package/dist/elements/task/ca-transcript.d.ts +74 -0
- package/dist/elements/task/ca-transcript.d.ts.map +1 -0
- package/dist/elements/task/ca-transcript.js +241 -0
- package/dist/elements/task/ca-transcript.js.map +1 -0
- package/dist/elements/task/context.d.ts +57 -0
- package/dist/elements/task/context.d.ts.map +1 -0
- package/dist/elements/task/context.js +61 -0
- package/dist/elements/task/context.js.map +1 -0
- package/dist/elements/task/header.d.ts +9 -0
- package/dist/elements/task/header.d.ts.map +1 -0
- package/dist/elements/task/header.js +287 -0
- package/dist/elements/task/header.js.map +1 -0
- package/dist/elements/task/index.d.ts +3 -0
- package/dist/elements/task/index.d.ts.map +1 -0
- package/dist/elements/task/index.js +3 -0
- package/dist/elements/task/index.js.map +1 -0
- package/dist/elements/task/inputs.d.ts +28 -0
- package/dist/elements/task/inputs.d.ts.map +1 -0
- package/dist/elements/task/inputs.js +27 -0
- package/dist/elements/task/inputs.js.map +1 -0
- package/dist/elements/task/panes/definition.d.ts +5 -0
- package/dist/elements/task/panes/definition.d.ts.map +1 -0
- package/dist/elements/task/panes/definition.js +5 -0
- package/dist/elements/task/panes/definition.js.map +1 -0
- package/dist/elements/task/panes/io.d.ts +8 -0
- package/dist/elements/task/panes/io.d.ts.map +1 -0
- package/dist/elements/task/panes/io.js +184 -0
- package/dist/elements/task/panes/io.js.map +1 -0
- package/dist/elements/task/panes/transcript.d.ts +5 -0
- package/dist/elements/task/panes/transcript.d.ts.map +1 -0
- package/dist/elements/task/panes/transcript.js +29 -0
- package/dist/elements/task/panes/transcript.js.map +1 -0
- package/dist/elements/task/rounds.d.ts +14 -0
- package/dist/elements/task/rounds.d.ts.map +1 -0
- package/dist/elements/task/rounds.js +59 -0
- package/dist/elements/task/rounds.js.map +1 -0
- package/dist/elements/task/styles.d.ts +2 -0
- package/dist/elements/task/styles.d.ts.map +1 -0
- package/dist/elements/task/styles.js +66 -0
- package/dist/elements/task/styles.js.map +1 -0
- package/dist/elements/task/transcript-model.d.ts +106 -0
- package/dist/elements/task/transcript-model.d.ts.map +1 -0
- package/dist/elements/task/transcript-model.js +280 -0
- package/dist/elements/task/transcript-model.js.map +1 -0
- package/dist/elements/task/who.d.ts +5 -0
- package/dist/elements/task/who.d.ts.map +1 -0
- package/dist/elements/task/who.js +30 -0
- package/dist/elements/task/who.js.map +1 -0
- package/dist/elements/trends/ca-trends.d.ts +55 -0
- package/dist/elements/trends/ca-trends.d.ts.map +1 -0
- package/dist/elements/trends/ca-trends.js +213 -0
- package/dist/elements/trends/ca-trends.js.map +1 -0
- package/dist/events.d.ts +107 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +5 -0
- package/dist/events.js.map +1 -0
- package/dist/i18n.d.ts +16 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +48 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/clock.d.ts +20 -0
- package/dist/lib/clock.d.ts.map +1 -0
- package/dist/lib/clock.js +45 -0
- package/dist/lib/clock.js.map +1 -0
- package/dist/lib/format.d.ts +35 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +117 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/highlight.d.ts +5 -0
- package/dist/lib/highlight.d.ts.map +1 -0
- package/dist/lib/highlight.js +86 -0
- package/dist/lib/highlight.js.map +1 -0
- package/dist/lib/labels.d.ts +103 -0
- package/dist/lib/labels.d.ts.map +1 -0
- package/dist/lib/labels.js +249 -0
- package/dist/lib/labels.js.map +1 -0
- package/dist/lib/markdown.d.ts +13 -0
- package/dist/lib/markdown.d.ts.map +1 -0
- package/dist/lib/markdown.js +118 -0
- package/dist/lib/markdown.js.map +1 -0
- package/dist/lib/memory.d.ts +27 -0
- package/dist/lib/memory.d.ts.map +1 -0
- package/dist/lib/memory.js +117 -0
- package/dist/lib/memory.js.map +1 -0
- package/dist/lib/quota-format.d.ts +28 -0
- package/dist/lib/quota-format.d.ts.map +1 -0
- package/dist/lib/quota-format.js +67 -0
- package/dist/lib/quota-format.js.map +1 -0
- package/dist/lib/scroll.d.ts +16 -0
- package/dist/lib/scroll.d.ts.map +1 -0
- package/dist/lib/scroll.js +70 -0
- package/dist/lib/scroll.js.map +1 -0
- package/dist/lib/status.d.ts +25 -0
- package/dist/lib/status.d.ts.map +1 -0
- package/dist/lib/status.js +40 -0
- package/dist/lib/status.js.map +1 -0
- package/dist/lib/tone.d.ts +29 -0
- package/dist/lib/tone.d.ts.map +1 -0
- package/dist/lib/tone.js +97 -0
- package/dist/lib/tone.js.map +1 -0
- package/dist/lib/trends.d.ts +15 -0
- package/dist/lib/trends.d.ts.map +1 -0
- package/dist/lib/trends.js +36 -0
- package/dist/lib/trends.js.map +1 -0
- package/dist/locales/codes.d.ts +14 -0
- package/dist/locales/codes.d.ts.map +1 -0
- package/dist/locales/codes.js +21 -0
- package/dist/locales/codes.js.map +1 -0
- package/dist/locales/ja.d.ts +761 -0
- package/dist/locales/ja.d.ts.map +1 -0
- package/dist/locales/ja.js +767 -0
- package/dist/locales/ja.js.map +1 -0
- package/dist/route.d.ts +46 -0
- package/dist/route.d.ts.map +1 -0
- package/dist/route.js +102 -0
- package/dist/route.js.map +1 -0
- package/dist/router.d.ts +23 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +55 -0
- package/dist/router.js.map +1 -0
- package/dist/styles/base.d.ts +11 -0
- package/dist/styles/base.d.ts.map +1 -0
- package/dist/styles/base.js +241 -0
- package/dist/styles/base.js.map +1 -0
- package/dist/styles/chips.d.ts +2 -0
- package/dist/styles/chips.d.ts.map +1 -0
- package/dist/styles/chips.js +18 -0
- package/dist/styles/chips.js.map +1 -0
- package/dist/styles/executor-icon.d.ts +3 -0
- package/dist/styles/executor-icon.d.ts.map +1 -0
- package/dist/styles/executor-icon.js +9 -0
- package/dist/styles/executor-icon.js.map +1 -0
- package/dist/styles/facts.d.ts +2 -0
- package/dist/styles/facts.d.ts.map +1 -0
- package/dist/styles/facts.js +7 -0
- package/dist/styles/facts.js.map +1 -0
- package/dist/styles/index.d.ts +17 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +16 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/layout.d.ts +2 -0
- package/dist/styles/layout.d.ts.map +1 -0
- package/dist/styles/layout.js +30 -0
- package/dist/styles/layout.js.map +1 -0
- package/dist/styles/legend.d.ts +2 -0
- package/dist/styles/legend.d.ts.map +1 -0
- package/dist/styles/legend.js +8 -0
- package/dist/styles/legend.js.map +1 -0
- package/dist/styles/meter.d.ts +3 -0
- package/dist/styles/meter.d.ts.map +1 -0
- package/dist/styles/meter.js +9 -0
- package/dist/styles/meter.js.map +1 -0
- package/dist/styles/motion.d.ts +2 -0
- package/dist/styles/motion.d.ts.map +1 -0
- package/dist/styles/motion.js +27 -0
- package/dist/styles/motion.js.map +1 -0
- package/dist/styles/prose.d.ts +3 -0
- package/dist/styles/prose.d.ts.map +1 -0
- package/dist/styles/prose.js +59 -0
- package/dist/styles/prose.js.map +1 -0
- package/dist/styles/reset.d.ts +2 -0
- package/dist/styles/reset.d.ts.map +1 -0
- package/dist/styles/reset.js +13 -0
- package/dist/styles/reset.js.map +1 -0
- package/dist/styles/status.d.ts +2 -0
- package/dist/styles/status.d.ts.map +1 -0
- package/dist/styles/status.js +52 -0
- package/dist/styles/status.js.map +1 -0
- package/dist/styles/text.d.ts +2 -0
- package/dist/styles/text.d.ts.map +1 -0
- package/dist/styles/text.js +21 -0
- package/dist/styles/text.js.map +1 -0
- package/dist/styles/theme-sheet.d.ts +12 -0
- package/dist/styles/theme-sheet.d.ts.map +1 -0
- package/dist/styles/theme-sheet.js +24 -0
- package/dist/styles/theme-sheet.js.map +1 -0
- package/dist/styles/themes.d.ts +75 -0
- package/dist/styles/themes.d.ts.map +1 -0
- package/dist/styles/themes.js +452 -0
- package/dist/styles/themes.js.map +1 -0
- package/dist/styles/tokens.d.ts +8 -0
- package/dist/styles/tokens.d.ts.map +1 -0
- package/dist/styles/tokens.js +32 -0
- package/dist/styles/tokens.js.map +1 -0
- package/dist/themes/boot.d.ts +7 -0
- package/dist/themes/boot.d.ts.map +1 -0
- package/dist/themes/boot.js +14 -0
- package/dist/themes/boot.js.map +1 -0
- package/dist/themes/choice.d.ts +16 -0
- package/dist/themes/choice.d.ts.map +1 -0
- package/dist/themes/choice.js +45 -0
- package/dist/themes/choice.js.map +1 -0
- package/dist/themes/data.d.ts +42 -0
- package/dist/themes/data.d.ts.map +1 -0
- package/dist/themes/data.js +356 -0
- package/dist/themes/data.js.map +1 -0
- package/dist/themes/index.d.ts +5 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +8 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/sheet.d.ts +12 -0
- package/dist/themes/sheet.d.ts.map +1 -0
- package/dist/themes/sheet.js +24 -0
- package/dist/themes/sheet.js.map +1 -0
- package/dist/themes/tokens-list.d.ts +15 -0
- package/dist/themes/tokens-list.d.ts.map +1 -0
- package/dist/themes/tokens-list.js +62 -0
- package/dist/themes/tokens-list.js.map +1 -0
- package/dist/words/api-error.d.ts +4 -0
- package/dist/words/api-error.d.ts.map +1 -0
- package/dist/words/api-error.js +13 -0
- package/dist/words/api-error.js.map +1 -0
- package/dist/words/attempts.d.ts +17 -0
- package/dist/words/attempts.d.ts.map +1 -0
- package/dist/words/attempts.js +26 -0
- package/dist/words/attempts.js.map +1 -0
- package/dist/words/causes.d.ts +33 -0
- package/dist/words/causes.d.ts.map +1 -0
- package/dist/words/causes.js +58 -0
- package/dist/words/causes.js.map +1 -0
- package/dist/words/changes.d.ts +9 -0
- package/dist/words/changes.d.ts.map +1 -0
- package/dist/words/changes.js +21 -0
- package/dist/words/changes.js.map +1 -0
- package/dist/words/claims.d.ts +9 -0
- package/dist/words/claims.d.ts.map +1 -0
- package/dist/words/claims.js +12 -0
- package/dist/words/claims.js.map +1 -0
- package/dist/words/context.d.ts +18 -0
- package/dist/words/context.d.ts.map +1 -0
- package/dist/words/context.js +39 -0
- package/dist/words/context.js.map +1 -0
- package/dist/words/contract.d.ts +25 -0
- package/dist/words/contract.d.ts.map +1 -0
- package/dist/words/contract.js +52 -0
- package/dist/words/contract.js.map +1 -0
- package/dist/words/credential.d.ts +5 -0
- package/dist/words/credential.d.ts.map +1 -0
- package/dist/words/credential.js +7 -0
- package/dist/words/credential.js.map +1 -0
- package/dist/words/executor.d.ts +12 -0
- package/dist/words/executor.d.ts.map +1 -0
- package/dist/words/executor.js +20 -0
- package/dist/words/executor.js.map +1 -0
- package/dist/words/export.d.ts +8 -0
- package/dist/words/export.d.ts.map +1 -0
- package/dist/words/export.js +17 -0
- package/dist/words/export.js.map +1 -0
- package/dist/words/format.d.ts +36 -0
- package/dist/words/format.d.ts.map +1 -0
- package/dist/words/format.js +109 -0
- package/dist/words/format.js.map +1 -0
- package/dist/words/hops.d.ts +12 -0
- package/dist/words/hops.d.ts.map +1 -0
- package/dist/words/hops.js +27 -0
- package/dist/words/hops.js.map +1 -0
- package/dist/words/hosts.d.ts +18 -0
- package/dist/words/hosts.d.ts.map +1 -0
- package/dist/words/hosts.js +22 -0
- package/dist/words/hosts.js.map +1 -0
- package/dist/words/index.d.ts +27 -0
- package/dist/words/index.d.ts.map +1 -0
- package/dist/words/index.js +31 -0
- package/dist/words/index.js.map +1 -0
- package/dist/words/models.d.ts +10 -0
- package/dist/words/models.d.ts.map +1 -0
- package/dist/words/models.js +45 -0
- package/dist/words/models.js.map +1 -0
- package/dist/words/outcome.d.ts +14 -0
- package/dist/words/outcome.d.ts.map +1 -0
- package/dist/words/outcome.js +58 -0
- package/dist/words/outcome.js.map +1 -0
- package/dist/words/panels.d.ts +11 -0
- package/dist/words/panels.d.ts.map +1 -0
- package/dist/words/panels.js +50 -0
- package/dist/words/panels.js.map +1 -0
- package/dist/words/passes.d.ts +11 -0
- package/dist/words/passes.d.ts.map +1 -0
- package/dist/words/passes.js +13 -0
- package/dist/words/passes.js.map +1 -0
- package/dist/words/preflight.d.ts +28 -0
- package/dist/words/preflight.d.ts.map +1 -0
- package/dist/words/preflight.js +30 -0
- package/dist/words/preflight.js.map +1 -0
- package/dist/words/priority.d.ts +5 -0
- package/dist/words/priority.d.ts.map +1 -0
- package/dist/words/priority.js +7 -0
- package/dist/words/priority.js.map +1 -0
- package/dist/words/prompt.d.ts +10 -0
- package/dist/words/prompt.d.ts.map +1 -0
- package/dist/words/prompt.js +17 -0
- package/dist/words/prompt.js.map +1 -0
- package/dist/words/quota.d.ts +35 -0
- package/dist/words/quota.d.ts.map +1 -0
- package/dist/words/quota.js +102 -0
- package/dist/words/quota.js.map +1 -0
- package/dist/words/rests.d.ts +26 -0
- package/dist/words/rests.d.ts.map +1 -0
- package/dist/words/rests.js +77 -0
- package/dist/words/rests.js.map +1 -0
- package/dist/words/rounds.d.ts +14 -0
- package/dist/words/rounds.d.ts.map +1 -0
- package/dist/words/rounds.js +60 -0
- package/dist/words/rounds.js.map +1 -0
- package/dist/words/row-extras.d.ts +7 -0
- package/dist/words/row-extras.d.ts.map +1 -0
- package/dist/words/row-extras.js +26 -0
- package/dist/words/row-extras.js.map +1 -0
- package/dist/words/run-line.d.ts +40 -0
- package/dist/words/run-line.d.ts.map +1 -0
- package/dist/words/run-line.js +66 -0
- package/dist/words/run-line.js.map +1 -0
- package/dist/words/stop.d.ts +6 -0
- package/dist/words/stop.d.ts.map +1 -0
- package/dist/words/stop.js +69 -0
- package/dist/words/stop.js.map +1 -0
- package/dist/words/table.d.ts +4 -0
- package/dist/words/table.d.ts.map +1 -0
- package/dist/words/table.js +8 -0
- package/dist/words/table.js.map +1 -0
- package/dist/words/task-definition.d.ts +23 -0
- package/dist/words/task-definition.d.ts.map +1 -0
- package/dist/words/task-definition.js +27 -0
- package/dist/words/task-definition.js.map +1 -0
- package/dist/words/time-box.d.ts +8 -0
- package/dist/words/time-box.d.ts.map +1 -0
- package/dist/words/time-box.js +12 -0
- package/dist/words/time-box.js.map +1 -0
- package/dist/words/trends.d.ts +86 -0
- package/dist/words/trends.d.ts.map +1 -0
- package/dist/words/trends.js +104 -0
- package/dist/words/trends.js.map +1 -0
- package/dist/words/units.d.ts +9 -0
- package/dist/words/units.d.ts.map +1 -0
- package/dist/words/units.js +12 -0
- package/dist/words/units.js.map +1 -0
- package/docs/embed.md +118 -0
- package/docs/events.md +38 -0
- package/docs/examples/embed.html +31 -0
- package/docs/examples/journal.ts +32 -0
- package/docs/examples/live-transcript.ts +22 -0
- package/docs/examples/vite/index.html +30 -0
- package/docs/examples/vite/main.ts +23 -0
- package/docs/languages.md +48 -0
- package/docs/live-data.md +17 -0
- package/docs/theming.md +21 -0
- package/docs/tsconfig.json +14 -0
- package/package.json +131 -4
- package/src/adapters/check-rows.ts +78 -0
- package/src/adapters/filters.ts +76 -0
- package/src/adapters/graph/compound.ts +359 -0
- package/src/adapters/graph/flow-index.ts +154 -0
- package/src/adapters/graph/highlight.ts +40 -0
- package/src/adapters/graph/input.ts +236 -0
- package/src/adapters/graph/layer.ts +92 -0
- package/src/adapters/graph/matrix.ts +133 -0
- package/src/adapters/graph/plans.fixture.ts +194 -0
- package/src/adapters/graph/project.ts +358 -0
- package/src/adapters/graph/selection.ts +54 -0
- package/src/adapters/graph/states.ts +10 -0
- package/src/adapters/graph/types.ts +148 -0
- package/src/adapters/graph/words.ts +146 -0
- package/src/adapters/index.ts +22 -0
- package/src/adapters/journal-columns.ts +200 -0
- package/src/adapters/kpi-tiles.ts +211 -0
- package/src/adapters/lanes.ts +98 -0
- package/src/adapters/model-shares.ts +62 -0
- package/src/adapters/panel-body.ts +74 -0
- package/src/adapters/preflight.ts +27 -0
- package/src/adapters/task-columns.ts +120 -0
- package/src/adapters/transcript/index.ts +14 -0
- package/src/adapters/transcript/model.ts +156 -0
- package/src/adapters/transcript/rounds.ts +86 -0
- package/src/adapters/transcript/sections.ts +82 -0
- package/src/adapters/transcript/web.ts +40 -0
- package/src/adapters/transcript/who.ts +53 -0
- package/src/adapters/trends.ts +337 -0
- package/src/controllers/locale.ts +47 -0
- package/src/controllers/shortcuts.ts +69 -0
- package/src/controllers/stream.ts +103 -0
- package/src/controllers/task-detail.ts +54 -0
- package/src/controllers/theme.ts +73 -0
- package/src/core/events.ts +120 -0
- package/src/core/i18n.ts +76 -0
- package/src/core/index.ts +6 -0
- package/src/core/memory.ts +177 -0
- package/src/core/scroll.ts +73 -0
- package/src/core/view-route.ts +177 -0
- package/src/core/view-router.ts +66 -0
- package/src/define/all.ts +13 -0
- package/src/define/contracts.ts +2 -0
- package/src/define/definitions.ts +3 -0
- package/src/define/journal-table.ts +2 -0
- package/src/define/kpis.ts +2 -0
- package/src/define/monitor.ts +2 -0
- package/src/define/overview.ts +2 -0
- package/src/define/pipeline-graph.ts +2 -0
- package/src/define/procs.ts +3 -0
- package/src/define/task-table.ts +2 -0
- package/src/define/task-view.ts +2 -0
- package/src/define/timeline.ts +2 -0
- package/src/define/transcript.ts +2 -0
- package/src/elements/lists/ca-contracts.ts +204 -0
- package/src/elements/lists/ca-definitions.ts +170 -0
- package/src/elements/lists/ca-journal-table.ts +141 -0
- package/src/elements/lists/ca-panel-body.ts +139 -0
- package/src/elements/lists/ca-panel-view.ts +50 -0
- package/src/elements/lists/ca-proc-tree.ts +57 -0
- package/src/elements/lists/ca-procs-view.ts +89 -0
- package/src/elements/lists/ca-task-table.ts +94 -0
- package/src/elements/lists/index.ts +8 -0
- package/src/elements/overview/ca-kpis.ts +51 -0
- package/src/elements/overview/ca-model-usage.ts +113 -0
- package/src/elements/overview/ca-overview.ts +492 -0
- package/src/elements/overview/ca-pipeline-graph.ts +617 -0
- package/src/elements/overview/ca-quota.ts +164 -0
- package/src/elements/overview/ca-run-driver.ts +140 -0
- package/src/elements/overview/ca-spend-breakdown.ts +107 -0
- package/src/elements/overview/ca-timeline.ts +57 -0
- package/src/elements/overview/ca-workers.ts +82 -0
- package/src/elements/overview/index.ts +9 -0
- package/src/elements/overview/pipeline-graph/actions.ts +45 -0
- package/src/elements/overview/pipeline-graph/crumbs.ts +75 -0
- package/src/elements/overview/pipeline-graph/host.ts +26 -0
- package/src/elements/overview/pipeline-graph/inspector.ts +104 -0
- package/src/elements/overview/pipeline-graph/outline.ts +150 -0
- package/src/elements/overview/pipeline-graph/strings.ts +53 -0
- package/src/elements/overview/pipeline-graph/styles.ts +97 -0
- package/src/elements/shared/ca-definition.ts +206 -0
- package/src/elements/shared/contract-parts.ts +158 -0
- package/src/elements/shared/file-card.ts +49 -0
- package/src/elements/shared/prompt-text.ts +13 -0
- package/src/elements/shared/task-chip.ts +18 -0
- package/src/elements/shell/ca-clock.ts +27 -0
- package/src/elements/shell/ca-hosts.ts +93 -0
- package/src/elements/shell/ca-monitor.ts +526 -0
- package/src/elements/shell/ca-run-picker.ts +284 -0
- package/src/elements/shell/ca-theme-switch.ts +170 -0
- package/src/elements/shell/ca-toasts.ts +100 -0
- package/src/elements/shell/header.ts +45 -0
- package/src/elements/shell/styles.ts +72 -0
- package/src/elements/shell/tabs.ts +143 -0
- package/src/elements/shell/views.ts +67 -0
- package/src/elements/task/ca-task-view.ts +157 -0
- package/src/elements/task/ca-transcript.ts +214 -0
- package/src/elements/task/context.ts +105 -0
- package/src/elements/task/header.ts +292 -0
- package/src/elements/task/index.ts +2 -0
- package/src/elements/task/inputs.ts +46 -0
- package/src/elements/task/panes/definition.ts +7 -0
- package/src/elements/task/panes/io.ts +190 -0
- package/src/elements/task/panes/transcript.ts +29 -0
- package/src/elements/task/styles.ts +66 -0
- package/src/elements/trends/ca-trends.ts +204 -0
- package/src/index.ts +23 -0
- package/src/lib/tone.ts +109 -0
- package/src/lib/trends.ts +44 -0
- package/src/locales/codes.ts +23 -0
- package/src/locales/ja.ts +771 -0
- package/src/words/api-error.ts +17 -0
- package/src/words/attempts.ts +28 -0
- package/src/words/causes.ts +67 -0
- package/src/words/changes.ts +27 -0
- package/src/words/claims.ts +16 -0
- package/src/words/context.ts +47 -0
- package/src/words/contract.ts +63 -0
- package/src/words/credential.ts +8 -0
- package/src/words/executor.ts +22 -0
- package/src/words/export.ts +22 -0
- package/src/words/format.ts +107 -0
- package/src/words/hops.ts +30 -0
- package/src/words/hosts.ts +37 -0
- package/src/words/index.ts +30 -0
- package/src/words/models.ts +50 -0
- package/src/words/outcome.ts +61 -0
- package/src/words/panels.ts +53 -0
- package/src/words/passes.ts +18 -0
- package/src/words/preflight.ts +53 -0
- package/src/words/priority.ts +8 -0
- package/src/words/prompt.ts +20 -0
- package/src/words/quota.ts +108 -0
- package/src/words/rests.ts +96 -0
- package/src/words/rounds.ts +56 -0
- package/src/words/row-extras.ts +24 -0
- package/src/words/run-line.ts +77 -0
- package/src/words/stop.ts +65 -0
- package/src/words/table.ts +10 -0
- package/src/words/task-definition.ts +37 -0
- package/src/words/time-box.ts +21 -0
- package/src/words/trends.ts +118 -0
|
@@ -0,0 +1,76 @@
|
|
|
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, type JournalRow, type Outcome, type TaskRow } from '@contraagent/api';
|
|
4
|
+
|
|
5
|
+
/** Tasks of `kind` (all when ''), whose kind, unit, claims, key or last stop contains `q`. */
|
|
6
|
+
export function filterTasks(tasks: readonly TaskRow[], kind: string, q: string): TaskRow[] {
|
|
7
|
+
const needle = q.toLowerCase();
|
|
8
|
+
return tasks.filter(
|
|
9
|
+
(t) => (!kind || t.kind === kind) && (!needle || `${t.kind} ${t.unit} ${(t.claims ?? []).join(' ')} ${t.key} ${t.last_stop}`.toLowerCase().includes(needle)),
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Failed first, then not started, partly done, running and waiting; the rest after them. */
|
|
14
|
+
const RANK: Partial<Record<Outcome, number>> = { failed: 0, not_started: 1, partial: 2, running: 3, waiting: 4 };
|
|
15
|
+
|
|
16
|
+
/** The tasks list's order: by `RANK`, then the latest journal row first, then plan order. */
|
|
17
|
+
export function sortTasks(tasks: readonly TaskRow[]): TaskRow[] {
|
|
18
|
+
return tasks
|
|
19
|
+
.map((t, i) => ({ t, i }))
|
|
20
|
+
.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)
|
|
21
|
+
.map((x) => x.t);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const JOURNAL_TEXT = ['key', 'unit', 'stop', 'kind', 'route', 'reason'] as const;
|
|
25
|
+
|
|
26
|
+
/** Keys of tasks that were retried: a try ran after one that ran and failed (`retries`). */
|
|
27
|
+
export const retriedKeys = (rows: readonly JournalRow[]): Set<string> => new Set(retries(rows).map((r) => r.key));
|
|
28
|
+
|
|
29
|
+
/** A row whose output was sent back to the agent at least once (a fix-up in the same session). */
|
|
30
|
+
export const hadFixup = (r: JournalRow): boolean => (r.rounds ?? 1) > 1;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Journal rows of `kind` with `stop` that contain `q`. Besides a stop value,
|
|
34
|
+
* `stop` takes 'bad' (every attempt that did not complete), 'fixup' (attempts
|
|
35
|
+
* whose output was sent back for a fix-up), 'retried' (every row of a task
|
|
36
|
+
* retried after a failed try, `retries`) and 'replayed' (attempts played from
|
|
37
|
+
* their recordings, `JournalRow.replayed`).
|
|
38
|
+
*/
|
|
39
|
+
export function filterJournal(rows: readonly JournalRow[], kind: string, stop: string, q: string): JournalRow[] {
|
|
40
|
+
const needle = q.toLowerCase();
|
|
41
|
+
const retried = stop === 'retried' ? retriedKeys(rows) : null;
|
|
42
|
+
return rows.filter((e) => {
|
|
43
|
+
if (stop === 'bad' && !isBad(e)) return false;
|
|
44
|
+
if (stop === 'fixup' && !hadFixup(e)) return false;
|
|
45
|
+
if (retried && !retried.has(e.key)) return false;
|
|
46
|
+
if (stop === 'replayed' && !e.replayed) return false;
|
|
47
|
+
if (stop && !['bad', 'fixup', 'retried', 'replayed'].includes(stop) && e.stop !== stop) return false;
|
|
48
|
+
if (kind && e.kind !== kind) return false;
|
|
49
|
+
return !needle || JOURNAL_TEXT.some((k) => String(e[k] ?? '').toLowerCase().includes(needle));
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Rows per stop, most frequent first. */
|
|
54
|
+
export function journalTally(rows: readonly JournalRow[]): [string, number][] {
|
|
55
|
+
const tally = new Map<string, number>();
|
|
56
|
+
for (const e of rows) tally.set(e.stop || '?', (tally.get(e.stop || '?') ?? 0) + 1);
|
|
57
|
+
return [...tally.entries()].sort((a, b) => b[1] - a[1]);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Per task key: how many tries ran (refusals are not tries), and the row index
|
|
62
|
+
* and try number of its last successful try.
|
|
63
|
+
*/
|
|
64
|
+
export function attemptFacts(rows: readonly JournalRow[]): Map<string, { count: number; lastOk: number; lastOkTry: number }> {
|
|
65
|
+
const facts = new Map<string, { count: number; lastOk: number; lastOkTry: number }>();
|
|
66
|
+
rows.forEach((r, i) => {
|
|
67
|
+
const f = facts.get(r.key) ?? { count: 0, lastOk: -1, lastOkTry: 0 };
|
|
68
|
+
if (isLaunched(r)) f.count++;
|
|
69
|
+
if (r.ok) {
|
|
70
|
+
f.lastOk = i;
|
|
71
|
+
f.lastOkTry = (r.attempt ?? 0) + 1;
|
|
72
|
+
}
|
|
73
|
+
facts.set(r.key, f);
|
|
74
|
+
});
|
|
75
|
+
return facts;
|
|
76
|
+
}
|
|
@@ -0,0 +1,359 @@
|
|
|
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, type FlowCallNode, type Plan } from '@contraagent/api';
|
|
17
|
+
import { cmpPasses, indexOf, loopsAt, passesAt, placeOf, push, shortName, startsWith, type FlowIndex, type FlowTask } from './flow-index.js';
|
|
18
|
+
import { arrange, extentOf } from '@contraagent/elements/graph';
|
|
19
|
+
import { projectTasks, shapeOf, type Projection } from './project.js';
|
|
20
|
+
import type { FlowBox, GraphEdge, GraphNode, GraphStub, LayerModel, LoopBox, NodeCounts } from './types.js';
|
|
21
|
+
|
|
22
|
+
/** Between a function's place and the id of an item drawn inside it. */
|
|
23
|
+
export const IN_SEP = '::';
|
|
24
|
+
/** The prefix of a function drawn open: `fx::<place>`. */
|
|
25
|
+
export const FLOW_BOX = 'fx::';
|
|
26
|
+
|
|
27
|
+
/** Where a function node is, across every layer: its layer and its id there (`<layer>/<id>`). */
|
|
28
|
+
export const placeKey = (layer: readonly string[], id: string): string => `${layer.join('/')}/${id}`;
|
|
29
|
+
|
|
30
|
+
/** What a function's place holds, for choosing what to open. */
|
|
31
|
+
export interface PlaceStats {
|
|
32
|
+
key: string;
|
|
33
|
+
/** The layer it is in, and its node's id there. */
|
|
34
|
+
layer: string[];
|
|
35
|
+
id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
/** Levels below the layer shown (0: a node of that layer). */
|
|
38
|
+
depth: number;
|
|
39
|
+
/** The loops of its layer's function around it, outermost first, and that function's file. */
|
|
40
|
+
loops: number[];
|
|
41
|
+
file: string;
|
|
42
|
+
/** Its tasks by state. */
|
|
43
|
+
counts: NodeCounts;
|
|
44
|
+
tasks: number;
|
|
45
|
+
/** Its agent tasks. */
|
|
46
|
+
agent: number;
|
|
47
|
+
failed: number;
|
|
48
|
+
running: number;
|
|
49
|
+
/** Tasks not done that will not run on their own: not started, and (once the run is over) pending. */
|
|
50
|
+
stuck: number;
|
|
51
|
+
/** A flow call in it stopped with an error. */
|
|
52
|
+
errors: boolean;
|
|
53
|
+
/** The ids of the nodes its own layer would draw. */
|
|
54
|
+
kids: Set<string>;
|
|
55
|
+
/** The places of the functions in its layer. */
|
|
56
|
+
fns: Set<string>;
|
|
57
|
+
/** The place it is in (null: a node of the layer shown). */
|
|
58
|
+
parent: string | null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface OpenChoice {
|
|
62
|
+
/** Places the reader opened and closed: they outrank the choice. */
|
|
63
|
+
open?: ReadonlySet<string>;
|
|
64
|
+
closed?: ReadonlySet<string>;
|
|
65
|
+
/** Open every function (bar `closed`). */
|
|
66
|
+
all?: boolean;
|
|
67
|
+
/** The most nodes the drawing holds before it stops opening functions on its own. */
|
|
68
|
+
budget: number;
|
|
69
|
+
/** Places of interest: the selection's, and those around it (`towardOf`); with `sel`, those of that selection. */
|
|
70
|
+
toward?: ReadonlySet<string>;
|
|
71
|
+
sel?: string;
|
|
72
|
+
/** The run is live: a pending task is waiting, not stuck. */
|
|
73
|
+
live?: boolean;
|
|
74
|
+
/** The most layers the drawing may span (left to right, or top to bottom) before it closes again what it opened on its own. */
|
|
75
|
+
maxSpan?: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** A failed or closed flow call (`raised`, `closed`). */
|
|
79
|
+
const stopped = (c: FlowCallNode | undefined) => c?.state === 'raised' || c?.state === 'closed';
|
|
80
|
+
|
|
81
|
+
/** Every function place under the layer `focus`, with what it holds. */
|
|
82
|
+
export function placeStats(ix: FlowIndex, focus: readonly string[], live = false): Map<string, PlaceStats> {
|
|
83
|
+
const d0 = focus.length;
|
|
84
|
+
const out = new Map<string, PlaceStats>();
|
|
85
|
+
const raised = new Set<string>();
|
|
86
|
+
if (ix.calls) for (const c of ix.calls.values()) if (stopped(c)) raised.add(c.id);
|
|
87
|
+
for (const t of ix.tasks) {
|
|
88
|
+
if (!startsWith(t.path, focus)) continue;
|
|
89
|
+
const st = t.n.state;
|
|
90
|
+
const callErr = !!t.call && [...raised].some((r) => t.call === r || t.call.startsWith(`${r}.`));
|
|
91
|
+
let parent: string | null = null;
|
|
92
|
+
for (let d = d0; d < t.path.length; d++) {
|
|
93
|
+
const p = placeOf(t, d);
|
|
94
|
+
const layer = t.path.slice(0, d);
|
|
95
|
+
const key = placeKey(layer, p.id);
|
|
96
|
+
let s = out.get(key);
|
|
97
|
+
if (!s) {
|
|
98
|
+
const counts: NodeCounts = { total: 0, done: 0, partial: 0, failed: 0, running: 0, pending: 0, skipped: 0, blocked: 0 };
|
|
99
|
+
const file = d > 0 ? (t.frames[d - 1]?.file ?? '') : '';
|
|
100
|
+
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 };
|
|
101
|
+
out.set(key, s);
|
|
102
|
+
}
|
|
103
|
+
s.tasks += 1;
|
|
104
|
+
s.counts.total += 1;
|
|
105
|
+
s.counts[st] += 1;
|
|
106
|
+
if (!isPython(t.n)) s.agent += 1;
|
|
107
|
+
if (st === 'failed') s.failed += 1;
|
|
108
|
+
else if (st === 'running') s.running += 1;
|
|
109
|
+
else if (st === 'blocked' || (st === 'pending' && !live)) s.stuck += 1;
|
|
110
|
+
if (callErr) s.errors = true;
|
|
111
|
+
const next = placeOf(t, d + 1);
|
|
112
|
+
s.kids.add(next.id);
|
|
113
|
+
if (next.type === 'flow') s.fns.add(placeKey(t.path.slice(0, d + 1), next.id));
|
|
114
|
+
parent = key;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** A place's interest, before its distance: more tasks, and a failure, running work or a selection in it, more. */
|
|
121
|
+
export function interest(s: PlaceStats, toward: ReadonlySet<string> = new Set()): number {
|
|
122
|
+
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);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Whether a place is worth opening on its own: it holds agent tasks, a failure, running
|
|
127
|
+
* work, work that will not run, or the selection. A place of finished Python steps says
|
|
128
|
+
* all it has in its node's count. (Furnas's threshold: only what is interesting enough is shown.)
|
|
129
|
+
*/
|
|
130
|
+
export const notable = (s: PlaceStats, toward: ReadonlySet<string> = new Set()): boolean =>
|
|
131
|
+
s.agent > 0 || s.failed > 0 || s.errors || s.running > 0 || s.stuck > 0 || toward.has(s.key);
|
|
132
|
+
|
|
133
|
+
/** Its degree of interest: its interest less its distance from the layer shown. */
|
|
134
|
+
export const doi = (s: PlaceStats, toward?: ReadonlySet<string>): number => interest(s, toward) - 1.5 * s.depth;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* The places to draw open: the reader's own, then, while the drawing stays within
|
|
138
|
+
* `budget` nodes, the rest in order of their degree of interest (a place's own
|
|
139
|
+
* functions become candidates once it is open), those `notable` only. A place opens only
|
|
140
|
+
* inside open places.
|
|
141
|
+
*/
|
|
142
|
+
export function chooseOpen(stats: ReadonlyMap<string, PlaceStats>, rootIds: number, c: OpenChoice): { open: Set<string>; auto: string[] } {
|
|
143
|
+
const open = new Set<string>();
|
|
144
|
+
const auto: string[] = [];
|
|
145
|
+
const closed = c.closed ?? new Set<string>();
|
|
146
|
+
const forced = c.open ?? new Set<string>();
|
|
147
|
+
let visible = rootIds;
|
|
148
|
+
const cands = new Set([...stats.values()].filter((s) => s.parent === null).map((s) => s.key));
|
|
149
|
+
while (cands.size) {
|
|
150
|
+
let best: PlaceStats | null = null;
|
|
151
|
+
let bestScore = -Infinity;
|
|
152
|
+
for (const k of cands) {
|
|
153
|
+
const s = stats.get(k) as PlaceStats;
|
|
154
|
+
const score = forced.has(k) ? Infinity : doi(s, c.toward);
|
|
155
|
+
if (score > bestScore) {
|
|
156
|
+
best = s;
|
|
157
|
+
bestScore = score;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (!best) break;
|
|
161
|
+
cands.delete(best.key);
|
|
162
|
+
if (closed.has(best.key)) continue;
|
|
163
|
+
const cost = best.kids.size - 1;
|
|
164
|
+
if (!forced.has(best.key) && !c.all && (visible + cost > c.budget || !notable(best, c.toward))) continue;
|
|
165
|
+
open.add(best.key);
|
|
166
|
+
if (!forced.has(best.key)) auto.push(best.key);
|
|
167
|
+
visible += cost;
|
|
168
|
+
for (const f of best.fns) cands.add(f);
|
|
169
|
+
}
|
|
170
|
+
return { open, auto };
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** The places of interest for a selection: the place it is in or names, and every place around it. */
|
|
174
|
+
export function towardOf(sel: string, stats: ReadonlyMap<string, PlaceStats>): Set<string> {
|
|
175
|
+
const out = new Set<string>();
|
|
176
|
+
let key: string | null = null;
|
|
177
|
+
if (sel.startsWith(FLOW_BOX)) key = sel.slice(FLOW_BOX.length).split('#')[0] ?? null;
|
|
178
|
+
else if (sel.includes(IN_SEP)) key = sel.slice(0, sel.lastIndexOf(IN_SEP));
|
|
179
|
+
for (let k = key; k !== null && stats.has(k); k = stats.get(k)?.parent ?? null) out.add(k);
|
|
180
|
+
return out;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export interface Compound {
|
|
184
|
+
model: LayerModel;
|
|
185
|
+
/** The places drawn open. */
|
|
186
|
+
open: Set<string>;
|
|
187
|
+
stats: Map<string, PlaceStats>;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* The layer `focus` of the plan with the places `chooseOpen` picks drawn open: a node
|
|
192
|
+
* per kind and per closed function, a cluster per open function (or one per chain of
|
|
193
|
+
* single functions), the loop boxes of every layer drawn, and the edges between the
|
|
194
|
+
* nodes the tasks are drawn in, whatever layer they are in.
|
|
195
|
+
*/
|
|
196
|
+
export function compound(plan: Plan, focus: readonly string[], choice: OpenChoice): Compound {
|
|
197
|
+
const ix = indexOf(plan);
|
|
198
|
+
const d0 = focus.length;
|
|
199
|
+
const inside = ix.tasks.filter((t) => startsWith(t.path, focus));
|
|
200
|
+
const stats = placeStats(ix, focus, choice.live);
|
|
201
|
+
const rootIds = new Set(inside.map((t) => placeOf(t, d0).id)).size;
|
|
202
|
+
const toward = choice.sel ? towardOf(choice.sel, stats) : choice.toward;
|
|
203
|
+
const { open, auto } = chooseOpen(stats, rootIds, { ...choice, toward });
|
|
204
|
+
let model = assemble(ix, focus, inside, stats, open);
|
|
205
|
+
// Too long a drawing: close again what was opened last on its own (the least interesting,
|
|
206
|
+
// and inside what was opened before it), until it spans `maxSpan` layers.
|
|
207
|
+
const span = (m: LayerModel) => extentOf(arrange(shapeOf(m))).span;
|
|
208
|
+
if (choice.maxSpan && !choice.all) {
|
|
209
|
+
while (auto.length && span(model) > choice.maxSpan) {
|
|
210
|
+
open.delete(auto.pop() as string);
|
|
211
|
+
model = assemble(ix, focus, inside, stats, open);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return { model, open, stats };
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/** The layer `focus` with the places `open` drawn open (`compound`). */
|
|
218
|
+
function assemble(ix: FlowIndex, focus: readonly string[], inside: readonly FlowTask[], stats: ReadonlyMap<string, PlaceStats>, open: ReadonlySet<string>): LayerModel {
|
|
219
|
+
const d0 = focus.length;
|
|
220
|
+
// Each task's container (the open place it is drawn in, '' for the layer shown) and its
|
|
221
|
+
// depth; and each container's tasks: every task under it, those of the places open in it too.
|
|
222
|
+
const containerOf = new Map<string, { key: string; depth: number }>();
|
|
223
|
+
const byContainer = new Map<string, FlowTask[]>([['', []]]);
|
|
224
|
+
for (const t of inside) {
|
|
225
|
+
let d = d0;
|
|
226
|
+
let key = '';
|
|
227
|
+
byContainer.get('')?.push(t);
|
|
228
|
+
while (d < t.path.length) {
|
|
229
|
+
const k = placeKey(t.path.slice(0, d), placeOf(t, d).id);
|
|
230
|
+
if (!open.has(k)) break;
|
|
231
|
+
key = k;
|
|
232
|
+
push(byContainer, k, t);
|
|
233
|
+
d++;
|
|
234
|
+
}
|
|
235
|
+
containerOf.set(t.n.key, { key, depth: d });
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Each container's layer, projected from its tasks.
|
|
239
|
+
const proj = new Map<string, Projection>();
|
|
240
|
+
const layerOfC = new Map<string, string[]>();
|
|
241
|
+
for (const [k, ts] of byContainer) {
|
|
242
|
+
const s = stats.get(k);
|
|
243
|
+
const layer = s ? [...s.layer, s.name] : [...focus];
|
|
244
|
+
layerOfC.set(k, layer);
|
|
245
|
+
proj.set(k, projectTasks(ix, layer, ts));
|
|
246
|
+
}
|
|
247
|
+
const prefix = (k: string, id: string) => (k === '' ? id : `${k}${IN_SEP}${id}`);
|
|
248
|
+
|
|
249
|
+
// Where an open place's content goes: into the cluster of the place around it when that place's
|
|
250
|
+
// layer holds it as its only function, outside any loop box; else into a cluster of its own.
|
|
251
|
+
const ownNode = (k: string): GraphNode | undefined => {
|
|
252
|
+
const s = stats.get(k);
|
|
253
|
+
const p = s ? proj.get(s.parent ?? '') : undefined;
|
|
254
|
+
return p?.model.nodes.find((n) => n.id === s?.id);
|
|
255
|
+
};
|
|
256
|
+
const merges = (k: string): boolean => {
|
|
257
|
+
const s = stats.get(k);
|
|
258
|
+
if (!s || s.parent === null) return false;
|
|
259
|
+
const p = proj.get(s.parent);
|
|
260
|
+
if (!p) return false;
|
|
261
|
+
const fns = p.model.nodes.filter((n) => n.type === 'flow');
|
|
262
|
+
return fns.length === 1 && fns[0]?.id === s.id && !fns[0]?.box;
|
|
263
|
+
};
|
|
264
|
+
const clusterOf = (k: string): string => (merges(k) ? clusterOf((stats.get(k) as PlaceStats).parent as string) : `${FLOW_BOX}${k}`);
|
|
265
|
+
|
|
266
|
+
const nodes: GraphNode[] = [];
|
|
267
|
+
const boxes: LoopBox[] = [];
|
|
268
|
+
const fns = new Map<string, FlowBox>();
|
|
269
|
+
const unitsSeen = new Set<string>();
|
|
270
|
+
for (const k of [...proj.keys()].sort((a, b) => (a === '' ? -1 : b === '' ? 1 : (stats.get(a)?.depth ?? 0) - (stats.get(b)?.depth ?? 0)))) {
|
|
271
|
+
const p = proj.get(k) as Projection;
|
|
272
|
+
const layer = layerOfC.get(k) as string[];
|
|
273
|
+
const home = k === '' ? null : clusterOf(k);
|
|
274
|
+
if (k !== '') {
|
|
275
|
+
const own = ownNode(k);
|
|
276
|
+
const s = stats.get(k) as PlaceStats;
|
|
277
|
+
const node = own ? { ...own, id: prefix(s.parent ?? '', own.id) } : undefined;
|
|
278
|
+
const part = { id: `${FLOW_BOX}${k}`, key: k, node: node as GraphNode };
|
|
279
|
+
if (home === `${FLOW_BOX}${k}`) {
|
|
280
|
+
const parentBox = own?.box ? prefix(s.parent ?? '', own.box) : s.parent !== null ? clusterOf(s.parent) : null;
|
|
281
|
+
fns.set(home, { id: home, parent: parentBox, parts: [part] });
|
|
282
|
+
} else fns.get(home as string)?.parts.push(part);
|
|
283
|
+
}
|
|
284
|
+
for (const b of p.model.boxes) {
|
|
285
|
+
boxes.push({ ...b, id: prefix(k, b.id), parent: b.parent ? prefix(k, b.parent) : home, layer });
|
|
286
|
+
}
|
|
287
|
+
for (const n of p.model.nodes) {
|
|
288
|
+
if (n.type === 'flow' && open.has(placeKey(layer, n.id))) continue;
|
|
289
|
+
nodes.push({ ...n, id: prefix(k, n.id), box: n.box ? prefix(k, n.box) : home, layer });
|
|
290
|
+
}
|
|
291
|
+
for (const u of p.model.units) unitsSeen.add(u);
|
|
292
|
+
}
|
|
293
|
+
// Every node's marks in one unit order, the run's.
|
|
294
|
+
const units = [...unitsSeen].sort((a, b) => (ix.unitRank.get(a) ?? 0) - (ix.unitRank.get(b) ?? 0));
|
|
295
|
+
const unitsOf = new Map<string, string[]>([...proj].map(([k, p]) => [k, p.model.units]));
|
|
296
|
+
for (const n of nodes) {
|
|
297
|
+
const k = n.id.includes(IN_SEP) ? n.id.slice(0, n.id.lastIndexOf(IN_SEP)) : '';
|
|
298
|
+
const local = unitsOf.get(k) ?? [];
|
|
299
|
+
if (!n.units.length) continue;
|
|
300
|
+
const by = new Map(local.map((u, i) => [u, n.units[i] ?? null]));
|
|
301
|
+
n.units = units.map((u) => by.get(u) ?? null);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Edges between the nodes the tasks are drawn in; from outside the layer shown, stubs.
|
|
305
|
+
const drawnOf = (t: FlowTask): string => {
|
|
306
|
+
const c = containerOf.get(t.n.key) as { key: string; depth: number };
|
|
307
|
+
return prefix(c.key, placeOf(t, c.depth).id);
|
|
308
|
+
};
|
|
309
|
+
const layerAt = (t: FlowTask): string[] => t.path.slice(0, (containerOf.get(t.n.key) as { depth: number }).depth);
|
|
310
|
+
const inOrder = new Set<string>();
|
|
311
|
+
const pairs = new Map<string, { from: string; to: string; type: 'after' | 'created'; tasks: Set<string>; samePass: boolean }>();
|
|
312
|
+
const stubs = new Map<string, { id: string; label: string; to: string; type: 'after' | 'created'; tasks: Set<string> }>();
|
|
313
|
+
for (const t of inside) {
|
|
314
|
+
const to = drawnOf(t);
|
|
315
|
+
const link = (dep: string, type: 'after' | 'created') => {
|
|
316
|
+
const o = ix.byKey.get(dep);
|
|
317
|
+
if (!o) return;
|
|
318
|
+
if (startsWith(o.path, focus)) {
|
|
319
|
+
const from = drawnOf(o);
|
|
320
|
+
if (from === to) {
|
|
321
|
+
if (type === 'after') inOrder.add(to);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
// The loops that matter are those of the deepest layer both are drawn in.
|
|
325
|
+
const la = layerAt(o);
|
|
326
|
+
const lb = layerAt(t);
|
|
327
|
+
let d = 0;
|
|
328
|
+
while (d < la.length && d < lb.length && la[d] === lb[d]) d++;
|
|
329
|
+
const a = loopsAt(o, d);
|
|
330
|
+
const b = loopsAt(t, d);
|
|
331
|
+
let k = 0;
|
|
332
|
+
while (k < a.length && a[k] === b[k]) k++;
|
|
333
|
+
const same = cmpPasses(passesAt(o, d).slice(0, k), passesAt(t, d).slice(0, k)) === 0;
|
|
334
|
+
const key = `${from}\u0000${to}\u0000${type}`;
|
|
335
|
+
const e = pairs.get(key) ?? pairs.set(key, { from, to, type, tasks: new Set(), samePass: false }).get(key);
|
|
336
|
+
e?.tasks.add(t.n.key);
|
|
337
|
+
if (e && same) e.samePass = true;
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
let c = 0;
|
|
341
|
+
while (c < d0 && o.path[c] === focus[c]) c++;
|
|
342
|
+
const p = placeOf(o, c);
|
|
343
|
+
const s = { id: `stub:${c}:${p.id}`, label: p.type === 'kind' ? (ix.labels.get(p.name) ?? p.name) : shortName(p.name) };
|
|
344
|
+
const sk = `${s.id}\u0000${to}\u0000${type}`;
|
|
345
|
+
(stubs.get(sk) ?? stubs.set(sk, { ...s, to, type, tasks: new Set() }).get(sk))?.tasks.add(t.n.key);
|
|
346
|
+
};
|
|
347
|
+
for (const dep of t.n.after ?? []) link(dep, 'after');
|
|
348
|
+
for (const dep of t.from) link(dep, 'created');
|
|
349
|
+
}
|
|
350
|
+
for (const n of nodes) n.inOrder = inOrder.has(n.id);
|
|
351
|
+
const edges: GraphEdge[] = [...pairs.values()]
|
|
352
|
+
.filter((e) => e.type === 'after' || !pairs.has(`${e.from}\u0000${e.to}\u0000after`))
|
|
353
|
+
.map((e) => ({ from: e.from, to: e.to, tasks: e.tasks.size, type: e.type, samePass: e.samePass, back: false }));
|
|
354
|
+
const stubList: GraphStub[] = [...stubs.values()]
|
|
355
|
+
.filter((s) => s.type === 'after' || !stubs.has(`${s.id}\u0000${s.to}\u0000after`))
|
|
356
|
+
.map((s) => ({ id: s.id, label: s.label, to: s.to, tasks: s.tasks.size, type: s.type }));
|
|
357
|
+
|
|
358
|
+
return { path: [...focus], nodes, boxes, fns: [...fns.values()], edges, stubs: stubList, units };
|
|
359
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// The plan as the graph reads it: each task's flow path, its loops and passes, its
|
|
2
|
+
// flow call, and where it is shown at a depth of the flow path.
|
|
3
|
+
// A plan node's origin (`flow`, `created_from`, `flow_call`) is optional on the
|
|
4
|
+
// wire (absent for a task no flow created), so the readers here check it before use.
|
|
5
|
+
import { type FlowCallNode, type Frame, type Loop, type Plan, type PlanNode } from '@contraagent/api';
|
|
6
|
+
import { LOOP_SEGMENT } from './types.js';
|
|
7
|
+
|
|
8
|
+
/** A frame of a task's flow path as the graph reads it: its loops by first line, and their passes. */
|
|
9
|
+
export interface TaskFrame {
|
|
10
|
+
function: string;
|
|
11
|
+
file: string;
|
|
12
|
+
line: number;
|
|
13
|
+
loops: number[];
|
|
14
|
+
passes: number[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface FlowTask {
|
|
18
|
+
n: PlanNode;
|
|
19
|
+
path: string[];
|
|
20
|
+
frames: TaskFrame[];
|
|
21
|
+
from: string[];
|
|
22
|
+
call: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface FlowIndex {
|
|
26
|
+
tasks: FlowTask[];
|
|
27
|
+
byKey: Map<string, FlowTask>;
|
|
28
|
+
calls: Map<string, FlowCallNode> | null;
|
|
29
|
+
unitRank: Map<string, number>;
|
|
30
|
+
labels: Map<string, string>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Adds `v` to the list of `k`. */
|
|
34
|
+
export const push = <K, V>(m: Map<K, V[]>, k: K, v: V): void => {
|
|
35
|
+
const xs = m.get(k);
|
|
36
|
+
if (xs) xs.push(v);
|
|
37
|
+
else m.set(k, [v]);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const isStr = (x: unknown): x is string => typeof x === 'string';
|
|
41
|
+
|
|
42
|
+
function readFrames(n: PlanNode): TaskFrame[] {
|
|
43
|
+
const f = n.flow as unknown;
|
|
44
|
+
if (!Array.isArray(f)) return [];
|
|
45
|
+
const out: TaskFrame[] = [];
|
|
46
|
+
for (const x of f as unknown[]) {
|
|
47
|
+
const r = x as Partial<Frame> | null;
|
|
48
|
+
if (!r || typeof r !== 'object' || !isStr(r.function)) break;
|
|
49
|
+
const read = (Array.isArray(r.loops) ? r.loops : []).filter((l): l is Loop => !!l && typeof l.line === 'number');
|
|
50
|
+
out.push({
|
|
51
|
+
function: r.function,
|
|
52
|
+
file: isStr(r.file) ? r.file : '',
|
|
53
|
+
line: typeof r.line === 'number' ? r.line : 0,
|
|
54
|
+
loops: read.map((l) => l.line),
|
|
55
|
+
// A pass not counted (null) reads as the first.
|
|
56
|
+
passes: read.map((l) => (typeof l.pass === 'number' && l.pass >= 1 ? l.pass : 1)),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function readCalls(plan: Plan): Map<string, FlowCallNode> | null {
|
|
63
|
+
const cs = plan.flow_calls as unknown;
|
|
64
|
+
if (!Array.isArray(cs) || cs.length === 0) return null; // no flow call recorded
|
|
65
|
+
return new Map((cs as Partial<FlowCallNode>[]).filter((c) => c && isStr(c.id) && isStr(c.function)).map((c) => [c.id as string, c as FlowCallNode]));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const indexes = new WeakMap<Plan, FlowIndex>();
|
|
69
|
+
|
|
70
|
+
export function indexOf(plan: Plan): FlowIndex {
|
|
71
|
+
const had = indexes.get(plan);
|
|
72
|
+
if (had) return had;
|
|
73
|
+
const tasks = plan.nodes.map((n): FlowTask => {
|
|
74
|
+
const frames = readFrames(n);
|
|
75
|
+
const from = n.created_from as unknown;
|
|
76
|
+
return {
|
|
77
|
+
n,
|
|
78
|
+
frames,
|
|
79
|
+
path: frames.map((f) => f.function),
|
|
80
|
+
from: Array.isArray(from) ? (from as unknown[]).filter(isStr) : [],
|
|
81
|
+
call: isStr(n.flow_call) ? n.flow_call : '',
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
const unitRank = new Map<string, number>();
|
|
85
|
+
for (const n of plan.nodes) if (n.unit && !unitRank.has(n.unit)) unitRank.set(n.unit, unitRank.size);
|
|
86
|
+
const ix: FlowIndex = {
|
|
87
|
+
tasks,
|
|
88
|
+
byKey: new Map(tasks.map((t) => [t.n.key, t])),
|
|
89
|
+
calls: readCalls(plan),
|
|
90
|
+
unitRank,
|
|
91
|
+
labels: new Map(plan.groups.map((g) => [g.id, g.label])),
|
|
92
|
+
};
|
|
93
|
+
indexes.set(plan, ix);
|
|
94
|
+
return ix;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export const startsWith = (path: readonly string[], prefix: readonly string[]) => prefix.every((p, i) => path[i] === p);
|
|
98
|
+
|
|
99
|
+
/** A function's name without its module. */
|
|
100
|
+
export const shortName = (fn: string): string => fn.slice(fn.lastIndexOf('.') + 1) || fn;
|
|
101
|
+
|
|
102
|
+
/** The loops around a task's call site at depth `d`, outermost first ([] outside any). */
|
|
103
|
+
export const loopsAt = (t: FlowTask, d: number): number[] => (d > 0 ? (t.frames[d - 1]?.loops ?? []) : []);
|
|
104
|
+
|
|
105
|
+
/** The pass of each of those loops, outermost first: the task's place in them. */
|
|
106
|
+
export const passesAt = (t: FlowTask, d: number): number[] => (d > 0 ? (t.frames[d - 1]?.passes ?? []) : []);
|
|
107
|
+
|
|
108
|
+
/** Two pass lists in the order the passes ran: the outer loop's first. */
|
|
109
|
+
export function cmpPasses(a: readonly number[], b: readonly number[]): number {
|
|
110
|
+
for (let i = 0; i < Math.max(a.length, b.length); i++) {
|
|
111
|
+
const d = (a[i] ?? 0) - (b[i] ?? 0);
|
|
112
|
+
if (d) return d;
|
|
113
|
+
}
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** The loop box ids for a loop chain, outermost first: `loop:7`, then `loop:7.9`, ... */
|
|
118
|
+
export const boxChain = (loops: readonly number[]): string[] => loops.map((_, i) => `${LOOP_SEGMENT}${loops.slice(0, i + 1).join('.')}`);
|
|
119
|
+
|
|
120
|
+
/** Where a task is shown at depth `d`: its kind node, or the node of the function it was created under. */
|
|
121
|
+
export function placeOf(t: FlowTask, d: number): { id: string; type: 'kind' | 'flow'; name: string; loops: number[] } {
|
|
122
|
+
const loops = loopsAt(t, d);
|
|
123
|
+
const at = loops.length ? `@${loops.join('.')}` : '';
|
|
124
|
+
if (t.path.length <= d) return { id: `kind:${t.n.group}${at}`, type: 'kind', name: t.n.group, loops };
|
|
125
|
+
const name = t.path[d] as string;
|
|
126
|
+
return { id: `flow:${name}${at}`, type: 'flow', name, loops };
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The flow call a function node stands for, for a task at depth `d`: the call that
|
|
131
|
+
* started at frame `d` (`own`), else the call the frame runs in (`yield from`). With
|
|
132
|
+
* no flow calls in the plan, each frame of the task's call chain is taken to start one.
|
|
133
|
+
*/
|
|
134
|
+
export function instanceOf(t: FlowTask, d: number, calls: Map<string, FlowCallNode> | null): { id: string; own: boolean } {
|
|
135
|
+
if (!t.call) return { id: `>${d}`, own: false };
|
|
136
|
+
const parts = t.call.split('.');
|
|
137
|
+
const chain = parts.map((_, i) => parts.slice(0, i + 1).join('.'));
|
|
138
|
+
let owner = 0;
|
|
139
|
+
let start = 0;
|
|
140
|
+
if (calls) {
|
|
141
|
+
for (let j = 1; j < chain.length; j++) {
|
|
142
|
+
const fn = calls.get(chain[j] as string)?.function;
|
|
143
|
+
const idx = fn === undefined ? -1 : t.frames.findIndex((f, i) => i > start && f.function === fn);
|
|
144
|
+
if (idx < 0 || idx > d) break;
|
|
145
|
+
owner = j;
|
|
146
|
+
start = idx;
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
owner = Math.min(d, chain.length - 1);
|
|
150
|
+
start = owner;
|
|
151
|
+
}
|
|
152
|
+
const id = chain[owner] as string;
|
|
153
|
+
return start === d ? { id, own: true } : { id: `${id}>${d}`, own: false };
|
|
154
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// What a hovered, focused or selected mark highlights: its unit's tasks and every
|
|
2
|
+
// task joined to them.
|
|
3
|
+
import type { PlanNode } from '@contraagent/api';
|
|
4
|
+
|
|
5
|
+
/** The plan's tasks by key, and the tasks that wait for each task. */
|
|
6
|
+
export interface TaskLinks {
|
|
7
|
+
byKey: ReadonlyMap<string, PlanNode>;
|
|
8
|
+
waiters: ReadonlyMap<string, readonly string[]>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function taskLinks(nodes: readonly PlanNode[]): TaskLinks {
|
|
12
|
+
const waiters = new Map<string, string[]>();
|
|
13
|
+
for (const n of nodes) for (const d of n.after ?? []) (waiters.get(d) ?? waiters.set(d, []).get(d))?.push(n.key);
|
|
14
|
+
return { byKey: new Map(nodes.map((n) => [n.key, n])), waiters };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The tasks to highlight for `hl` (a unit, or the key of a task without one): the
|
|
19
|
+
* unit's own, and every task joined to them upstream or downstream (a task without a
|
|
20
|
+
* unit, another unit's).
|
|
21
|
+
*/
|
|
22
|
+
export function related(nodes: readonly PlanNode[], links: TaskLinks, hl: string): Set<string> {
|
|
23
|
+
const seeds = nodes.filter((n) => (n.unit ? n.unit === hl : n.key === hl)).map((n) => n.key);
|
|
24
|
+
const on = new Set(seeds);
|
|
25
|
+
const walk = (next: (key: string) => readonly string[]) => {
|
|
26
|
+
const seen = new Set(seeds);
|
|
27
|
+
const queue = [...seeds];
|
|
28
|
+
for (let k = queue.pop(); k !== undefined; k = queue.pop()) {
|
|
29
|
+
for (const x of next(k)) {
|
|
30
|
+
if (seen.has(x)) continue;
|
|
31
|
+
seen.add(x);
|
|
32
|
+
on.add(x);
|
|
33
|
+
queue.push(x);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
walk((k) => links.waiters.get(k) ?? []);
|
|
38
|
+
walk((k) => links.byKey.get(k)?.after ?? []);
|
|
39
|
+
return on;
|
|
40
|
+
}
|