@prismatic-io/lux 0.0.2-preview.4 → 0.0.2-preview.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/lib/assertions/authoring.d.ts +2 -2
  2. package/lib/assertions/authoring.d.ts.map +1 -1
  3. package/lib/assertions/authoring.js.map +1 -1
  4. package/lib/assertions/core/index.d.ts.map +1 -1
  5. package/lib/assertions/core/index.js +2 -1
  6. package/lib/assertions/core/index.js.map +1 -1
  7. package/lib/assertions/core/resource-checks.d.ts +19 -0
  8. package/lib/assertions/core/resource-checks.d.ts.map +1 -1
  9. package/lib/assertions/core/resource-checks.js +32 -0
  10. package/lib/assertions/core/resource-checks.js.map +1 -1
  11. package/lib/cli/program.d.ts.map +1 -1
  12. package/lib/cli/program.js +6 -65
  13. package/lib/cli/program.js.map +1 -1
  14. package/lib/cli/view.d.ts +13 -0
  15. package/lib/cli/view.d.ts.map +1 -0
  16. package/lib/cli/view.js +126 -0
  17. package/lib/cli/view.js.map +1 -0
  18. package/lib/core/action-events.d.ts +29 -0
  19. package/lib/core/action-events.d.ts.map +1 -0
  20. package/lib/core/action-events.js +51 -0
  21. package/lib/core/action-events.js.map +1 -0
  22. package/lib/core/driver-metrics.d.ts +98 -0
  23. package/lib/core/driver-metrics.d.ts.map +1 -0
  24. package/lib/core/driver-metrics.js +36 -0
  25. package/lib/core/driver-metrics.js.map +1 -0
  26. package/lib/core/events.js +2 -2
  27. package/lib/core/experiment.d.ts +19 -0
  28. package/lib/core/experiment.d.ts.map +1 -1
  29. package/lib/core/experiment.js +2 -0
  30. package/lib/core/experiment.js.map +1 -1
  31. package/lib/core/index.d.ts +2 -0
  32. package/lib/core/index.d.ts.map +1 -1
  33. package/lib/core/index.js +2 -0
  34. package/lib/core/index.js.map +1 -1
  35. package/lib/core/run.d.ts +50 -0
  36. package/lib/core/run.d.ts.map +1 -1
  37. package/lib/core/run.js +6 -0
  38. package/lib/core/run.js.map +1 -1
  39. package/lib/index.d.ts +3 -1
  40. package/lib/index.d.ts.map +1 -1
  41. package/lib/index.js +3 -1
  42. package/lib/index.js.map +1 -1
  43. package/lib/orchestrator/compare.d.ts +9 -1
  44. package/lib/orchestrator/compare.d.ts.map +1 -1
  45. package/lib/orchestrator/compare.js +8 -0
  46. package/lib/orchestrator/compare.js.map +1 -1
  47. package/lib/orchestrator/experiment-contracts.d.ts +19 -0
  48. package/lib/orchestrator/experiment-contracts.d.ts.map +1 -1
  49. package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -1
  50. package/lib/orchestrator/experiment-evaluation.js +17 -0
  51. package/lib/orchestrator/experiment-evaluation.js.map +1 -1
  52. package/lib/orchestrator/experiment-report.d.ts +19 -0
  53. package/lib/orchestrator/experiment-report.d.ts.map +1 -1
  54. package/lib/orchestrator/experiment-runs.d.ts +38 -0
  55. package/lib/orchestrator/experiment-runs.d.ts.map +1 -1
  56. package/lib/orchestrator/index.d.ts +1 -1
  57. package/lib/orchestrator/index.d.ts.map +1 -1
  58. package/lib/orchestrator/index.js +1 -1
  59. package/lib/orchestrator/index.js.map +1 -1
  60. package/lib/orchestrator/list-runs.d.ts +6 -1
  61. package/lib/orchestrator/list-runs.d.ts.map +1 -1
  62. package/lib/orchestrator/list-runs.js +15 -1
  63. package/lib/orchestrator/list-runs.js.map +1 -1
  64. package/lib/orchestrator/run-execution.d.ts.map +1 -1
  65. package/lib/orchestrator/run-execution.js +11 -1
  66. package/lib/orchestrator/run-execution.js.map +1 -1
  67. package/lib/orchestrator/suite-compare.d.ts +34 -0
  68. package/lib/orchestrator/suite-compare.d.ts.map +1 -1
  69. package/lib/orchestrator/suite-summary.d.ts +68 -0
  70. package/lib/orchestrator/suite-summary.d.ts.map +1 -1
  71. package/lib/orchestrator/suite-summary.js +22 -7
  72. package/lib/orchestrator/suite-summary.js.map +1 -1
  73. package/lib/previewer/artifacts.d.ts +25 -0
  74. package/lib/previewer/artifacts.d.ts.map +1 -0
  75. package/lib/previewer/artifacts.js +180 -0
  76. package/lib/previewer/artifacts.js.map +1 -0
  77. package/lib/previewer/server.d.ts +104 -0
  78. package/lib/previewer/server.d.ts.map +1 -0
  79. package/lib/previewer/server.js +541 -0
  80. package/lib/previewer/server.js.map +1 -0
  81. package/package.json +2 -1
  82. package/skills/lux/references/eval-authoring.md +4 -2
  83. package/skills/lux-answerer/SKILL.md +1 -1
  84. package/src/assertions/authoring.ts +2 -0
  85. package/src/assertions/core/index.ts +2 -0
  86. package/src/assertions/core/resource-checks.ts +35 -0
  87. package/src/cli/program.ts +5 -91
  88. package/src/cli/view.ts +168 -0
  89. package/src/core/action-events.ts +59 -0
  90. package/src/core/driver-metrics.ts +51 -0
  91. package/src/core/events.ts +2 -2
  92. package/src/core/experiment.ts +2 -0
  93. package/src/core/index.ts +2 -0
  94. package/src/core/run.ts +6 -0
  95. package/src/index.ts +25 -0
  96. package/src/orchestrator/compare.ts +12 -0
  97. package/src/orchestrator/experiment-evaluation.ts +23 -0
  98. package/src/orchestrator/index.ts +1 -0
  99. package/src/orchestrator/list-runs.ts +25 -0
  100. package/src/orchestrator/run-execution.ts +12 -0
  101. package/src/orchestrator/suite-summary.ts +36 -8
  102. package/src/previewer/artifacts.ts +221 -0
  103. package/src/previewer/server.ts +763 -0
  104. package/viewer/app.css +2022 -0
  105. package/viewer/app.js +601 -0
  106. package/viewer/artifact-view.js +48 -0
  107. package/viewer/charts.js +86 -0
  108. package/viewer/detail.js +1108 -0
  109. package/viewer/format.js +129 -0
  110. package/viewer/index.html +151 -0
@@ -0,0 +1,86 @@
1
+ import { escapeHtml } from "./format.js";
2
+
3
+ const clamp01 = (value) =>
4
+ typeof value === "number" && Number.isFinite(value) ? Math.max(0, Math.min(1, value)) : 0;
5
+
6
+ export const quantizedBar = (value, tone, label, threshold = null) => {
7
+ const filled = Math.round(clamp01(value) * 20);
8
+ const thresholdCell =
9
+ typeof threshold === "number"
10
+ ? Math.min(19, Math.max(0, Math.floor(clamp01(threshold) * 20)))
11
+ : -1;
12
+ return `<span class="quantized-bar" role="img" aria-label="${escapeHtml(label)}">
13
+ ${Array.from({ length: 20 }, (_, index) => {
14
+ const classes = [
15
+ "quantized-cell",
16
+ index < filled ? `is-filled ${tone}` : "",
17
+ index === thresholdCell ? "has-threshold" : "",
18
+ ]
19
+ .filter(Boolean)
20
+ .join(" ");
21
+ return `<i class="${classes}"></i>`;
22
+ }).join("")}
23
+ </span>`;
24
+ };
25
+
26
+ const distributionBar = (segments, label) => {
27
+ const total = segments.reduce((sum, segment) => sum + segment.value, 0);
28
+ const cells = Array.from({ length: 20 }, (_, index) => {
29
+ if (total <= 0) return '<i class="quantized-cell"></i>';
30
+ const point = ((index + 0.5) / 20) * total;
31
+ let cumulative = 0;
32
+ const segment =
33
+ segments.find((entry) => {
34
+ cumulative += entry.value;
35
+ return point <= cumulative;
36
+ }) ?? segments.at(-1);
37
+ return `<i class="quantized-cell is-filled segment-${escapeHtml(segment?.key)}"></i>`;
38
+ }).join("");
39
+ const legend = segments
40
+ .filter((segment) => segment.value > 0)
41
+ .map(
42
+ (segment) =>
43
+ `<span><i class="legend-swatch segment-${escapeHtml(segment.key)}"></i>${escapeHtml(
44
+ segment.label,
45
+ )} <b>${segment.value}</b></span>`,
46
+ )
47
+ .join("");
48
+ return `<div class="distribution-visual">
49
+ <span class="quantized-bar" role="img" aria-label="${escapeHtml(label)}">${cells}</span>
50
+ <div class="visual-legend">${legend || "<span>No recorded values</span>"}</div>
51
+ </div>`;
52
+ };
53
+
54
+ export const comparisonBars = ({
55
+ title,
56
+ before,
57
+ after,
58
+ maximum,
59
+ beforeText,
60
+ afterText,
61
+ deltaText,
62
+ deltaTone,
63
+ }) => {
64
+ const scale = Math.max(maximum ?? 0, before ?? 0, after ?? 0, 1);
65
+ return `<figure class="comparison-bars">
66
+ <figcaption><span>${escapeHtml(title)}</span><b class="${escapeHtml(
67
+ deltaTone,
68
+ )}">${escapeHtml(deltaText)}</b></figcaption>
69
+ <div class="bar-lane"><strong>A</strong>${quantizedBar(
70
+ (before ?? 0) / scale,
71
+ "tone-before",
72
+ `${title} baseline ${beforeText}`,
73
+ )}<span>${escapeHtml(beforeText)}</span></div>
74
+ <div class="bar-lane"><strong>B</strong>${quantizedBar(
75
+ (after ?? 0) / scale,
76
+ "tone-after",
77
+ `${title} candidate ${afterText}`,
78
+ )}<span>${escapeHtml(afterText)}</span></div>
79
+ </figure>`;
80
+ };
81
+
82
+ export const compositionFigure = (title, segments, label) => `
83
+ <figure class="composition-figure">
84
+ <figcaption>${escapeHtml(title)}</figcaption>
85
+ ${distributionBar(segments, label)}
86
+ </figure>`;