@tai42/studio-sdk 20.0.0 → 22.0.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.
Files changed (143) hide show
  1. package/dist/components/chip-group.d.ts +42 -0
  2. package/dist/components/chip-group.d.ts.map +1 -0
  3. package/dist/components/chip-group.js +85 -0
  4. package/dist/components/chip-group.js.map +1 -0
  5. package/dist/components/components.css +16 -3
  6. package/dist/components/execution-key-picker.js.map +1 -1
  7. package/dist/components/extension-grouping.d.ts +8 -12
  8. package/dist/components/extension-grouping.d.ts.map +1 -1
  9. package/dist/components/extension-grouping.js +12 -15
  10. package/dist/components/extension-grouping.js.map +1 -1
  11. package/dist/components/extension-picker.d.ts +3 -4
  12. package/dist/components/extension-picker.d.ts.map +1 -1
  13. package/dist/components/extension-picker.js +10 -10
  14. package/dist/components/extension-picker.js.map +1 -1
  15. package/dist/components/fleet-report.d.ts +10 -5
  16. package/dist/components/fleet-report.d.ts.map +1 -1
  17. package/dist/components/fleet-report.js +20 -3
  18. package/dist/components/fleet-report.js.map +1 -1
  19. package/dist/components/json-tree-model.d.ts +19 -7
  20. package/dist/components/json-tree-model.d.ts.map +1 -1
  21. package/dist/components/json-tree-model.js +32 -8
  22. package/dist/components/json-tree-model.js.map +1 -1
  23. package/dist/components/json-tree.d.ts +10 -1
  24. package/dist/components/json-tree.d.ts.map +1 -1
  25. package/dist/components/json-tree.js +7 -4
  26. package/dist/components/json-tree.js.map +1 -1
  27. package/dist/components/select.d.ts +6 -0
  28. package/dist/components/select.d.ts.map +1 -1
  29. package/dist/components/select.js +3 -2
  30. package/dist/components/select.js.map +1 -1
  31. package/dist/components/served-media.d.ts +50 -4
  32. package/dist/components/served-media.d.ts.map +1 -1
  33. package/dist/components/served-media.js +69 -19
  34. package/dist/components/served-media.js.map +1 -1
  35. package/dist/env-markers.d.ts +25 -0
  36. package/dist/env-markers.d.ts.map +1 -0
  37. package/dist/env-markers.js +63 -0
  38. package/dist/env-markers.js.map +1 -0
  39. package/dist/hooks/interactions-stream.d.ts.map +1 -1
  40. package/dist/hooks/interactions-stream.js +9 -7
  41. package/dist/hooks/interactions-stream.js.map +1 -1
  42. package/dist/hooks/useApi.d.ts +2264 -912
  43. package/dist/hooks/useApi.d.ts.map +1 -1
  44. package/dist/hooks/useCapabilities.d.ts +5 -9
  45. package/dist/hooks/useCapabilities.d.ts.map +1 -1
  46. package/dist/hooks/useCapabilities.js +8 -33
  47. package/dist/hooks/useCapabilities.js.map +1 -1
  48. package/dist/host.d.ts +2 -0
  49. package/dist/host.d.ts.map +1 -1
  50. package/dist/host.js +8 -0
  51. package/dist/host.js.map +1 -1
  52. package/dist/index.d.ts +12 -6
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +5 -3
  55. package/dist/index.js.map +1 -1
  56. package/dist/plugin/coverage.d.ts +14 -0
  57. package/dist/plugin/coverage.d.ts.map +1 -0
  58. package/dist/plugin/coverage.js +14 -0
  59. package/dist/plugin/coverage.js.map +1 -0
  60. package/dist/plugin/registry.d.ts +11 -1
  61. package/dist/plugin/registry.d.ts.map +1 -1
  62. package/dist/plugin/registry.js +33 -4
  63. package/dist/plugin/registry.js.map +1 -1
  64. package/dist/plugin/types.d.ts +43 -1
  65. package/dist/plugin/types.d.ts.map +1 -1
  66. package/dist/schema-form/SchemaForm.d.ts +11 -1
  67. package/dist/schema-form/SchemaForm.d.ts.map +1 -1
  68. package/dist/schema-form/SchemaForm.js +2 -2
  69. package/dist/schema-form/SchemaForm.js.map +1 -1
  70. package/dist/schema-form/classify.d.ts.map +1 -1
  71. package/dist/schema-form/classify.js +54 -2
  72. package/dist/schema-form/classify.js.map +1 -1
  73. package/dist/schema-form/date-range-field.d.ts +44 -0
  74. package/dist/schema-form/date-range-field.d.ts.map +1 -0
  75. package/dist/schema-form/date-range-field.js +72 -0
  76. package/dist/schema-form/date-range-field.js.map +1 -0
  77. package/dist/schema-form/enum-field.d.ts +3 -1
  78. package/dist/schema-form/enum-field.d.ts.map +1 -1
  79. package/dist/schema-form/enum-field.js +8 -2
  80. package/dist/schema-form/enum-field.js.map +1 -1
  81. package/dist/schema-form/field-model.d.ts +20 -1
  82. package/dist/schema-form/field-model.d.ts.map +1 -1
  83. package/dist/schema-form/field-node.d.ts +10 -0
  84. package/dist/schema-form/field-node.d.ts.map +1 -1
  85. package/dist/schema-form/field-node.js +6 -3
  86. package/dist/schema-form/field-node.js.map +1 -1
  87. package/dist/schema-form/index.d.ts +3 -1
  88. package/dist/schema-form/index.d.ts.map +1 -1
  89. package/dist/schema-form/index.js +1 -0
  90. package/dist/schema-form/index.js.map +1 -1
  91. package/dist/schema-form/multiselect-field.d.ts.map +1 -1
  92. package/dist/schema-form/multiselect-field.js +11 -0
  93. package/dist/schema-form/multiselect-field.js.map +1 -1
  94. package/dist/schema-form/object-fields.d.ts +9 -1
  95. package/dist/schema-form/object-fields.d.ts.map +1 -1
  96. package/dist/schema-form/object-fields.js +16 -3
  97. package/dist/schema-form/object-fields.js.map +1 -1
  98. package/dist/schema-form/string-field.d.ts +6 -1
  99. package/dist/schema-form/string-field.d.ts.map +1 -1
  100. package/dist/schema-form/string-field.js +42 -8
  101. package/dist/schema-form/string-field.js.map +1 -1
  102. package/dist/schema-form/types.d.ts +36 -0
  103. package/dist/schema-form/types.d.ts.map +1 -1
  104. package/dist/state-binding/UpdateRow.d.ts +2 -2
  105. package/dist/state-binding/UpdateRow.js +1 -1
  106. package/dist/state-binding/UpdateRow.js.map +1 -1
  107. package/dist/state-binding/adapter.d.ts +12 -8
  108. package/dist/state-binding/adapter.d.ts.map +1 -1
  109. package/dist/state-binding/adapter.js +30 -13
  110. package/dist/state-binding/adapter.js.map +1 -1
  111. package/package.json +5 -4
  112. package/src/components/chip-group.tsx +157 -0
  113. package/src/components/components.css +16 -3
  114. package/src/components/execution-key-picker.tsx +1 -1
  115. package/src/components/extension-grouping.ts +22 -22
  116. package/src/components/extension-picker.tsx +13 -14
  117. package/src/components/fleet-report.tsx +66 -7
  118. package/src/components/json-tree-model.ts +36 -8
  119. package/src/components/json-tree.tsx +24 -4
  120. package/src/components/select.tsx +11 -1
  121. package/src/components/served-media.tsx +150 -16
  122. package/src/env-markers.ts +70 -0
  123. package/src/hooks/interactions-stream.ts +9 -7
  124. package/src/hooks/useCapabilities.ts +8 -31
  125. package/src/host.ts +2 -0
  126. package/src/index.ts +22 -2
  127. package/src/plugin/coverage.ts +23 -0
  128. package/src/plugin/registry.ts +58 -3
  129. package/src/plugin/types.ts +45 -1
  130. package/src/schema-form/SchemaForm.tsx +10 -0
  131. package/src/schema-form/classify.ts +59 -3
  132. package/src/schema-form/date-range-field.tsx +167 -0
  133. package/src/schema-form/enum-field.tsx +20 -0
  134. package/src/schema-form/field-model.ts +24 -2
  135. package/src/schema-form/field-node.tsx +19 -0
  136. package/src/schema-form/index.ts +10 -1
  137. package/src/schema-form/multiselect-field.tsx +21 -0
  138. package/src/schema-form/object-fields.tsx +36 -2
  139. package/src/schema-form/string-field.tsx +72 -1
  140. package/src/schema-form/types.ts +38 -0
  141. package/src/state-binding/README.md +10 -7
  142. package/src/state-binding/UpdateRow.tsx +3 -3
  143. package/src/state-binding/adapter.ts +31 -16
@@ -0,0 +1,42 @@
1
+ /**
2
+ * `ChipGroup` — a tap-to-select grid of pill chips (`.tai-chip`), in two modes.
3
+ *
4
+ * `single` is a `role="radiogroup"` of `role="radio"` chips carrying `aria-checked`:
5
+ * exactly one value is selected, the arrow keys move the selection, and only the
6
+ * selected chip (or the first, when none is) sits in the tab order. `multi` is a
7
+ * group of toggle buttons carrying `aria-pressed`: any number are selected, the
8
+ * arrow keys move focus, and Space/Enter (the native button activation) toggles the
9
+ * focused chip.
10
+ *
11
+ * Roving tabindex and arrow-key movement are owned here — there is no multi-select
12
+ * primitive to borrow — so both modes share one keyboard model: ←/↑ to the previous
13
+ * chip, →/↓ to the next (wrapping), Home/End to the ends, skipping disabled chips.
14
+ * The handler rides each chip (a button, an interactive element) rather than the
15
+ * container, so no static element carries an interaction. Like `RadioGroup`, the
16
+ * group takes its accessible name from an enclosing group `Field`, not a label of
17
+ * its own.
18
+ */
19
+ import type { ReactNode } from 'react';
20
+ /** One selectable chip: its answer `value` and the visible `label`. */
21
+ export interface ChipOption {
22
+ readonly value: string;
23
+ readonly label: string;
24
+ readonly disabled?: boolean;
25
+ }
26
+ export type ChipGroupProps = {
27
+ /** Exactly one value selected — a `radiogroup` of radios. */
28
+ readonly mode: 'single';
29
+ readonly options: readonly ChipOption[];
30
+ readonly value: string;
31
+ readonly onValueChange: (value: string) => void;
32
+ readonly disabled?: boolean;
33
+ } | {
34
+ /** Any number selected — a group of `aria-pressed` toggle buttons. */
35
+ readonly mode: 'multi';
36
+ readonly options: readonly ChipOption[];
37
+ readonly value: readonly string[];
38
+ readonly onValueChange: (value: readonly string[]) => void;
39
+ readonly disabled?: boolean;
40
+ };
41
+ export declare function ChipGroup(props: ChipGroupProps): ReactNode;
42
+ //# sourceMappingURL=chip-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip-group.d.ts","sourceRoot":"","sources":["../../src/components/chip-group.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAKtD,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,cAAc,GACtB;IACE,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B,GACD;IACE,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IAC3D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEN,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CA4G1D"}
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useRef, useState } from 'react';
3
+ import { useFieldControl } from './field';
4
+ export function ChipGroup(props) {
5
+ const { options, disabled = false } = props;
6
+ const field = useFieldControl();
7
+ const chipRefs = useRef([]);
8
+ const isSelected = (option) => props.mode === 'single' ? props.value === option.value : props.value.includes(option.value);
9
+ // The chip in the tab order: the (first) selected one, else the first enabled
10
+ // one — so Tab lands on the active choice and the arrows rove from there.
11
+ const [rovingIndex, setRovingIndex] = useState(() => {
12
+ const selected = options.findIndex(isSelected);
13
+ if (selected >= 0)
14
+ return selected;
15
+ const firstEnabled = options.findIndex((option) => option.disabled !== true);
16
+ return firstEnabled >= 0 ? firstEnabled : 0;
17
+ });
18
+ const enabledIndices = options
19
+ .map((option, index) => (option.disabled === true ? -1 : index))
20
+ .filter((index) => index >= 0);
21
+ const focusChip = (index) => {
22
+ setRovingIndex(index);
23
+ chipRefs.current[index]?.focus();
24
+ };
25
+ const select = (option) => {
26
+ if (props.mode === 'single') {
27
+ props.onValueChange(option.value);
28
+ return;
29
+ }
30
+ const chosen = new Set(props.value);
31
+ if (chosen.has(option.value))
32
+ chosen.delete(option.value);
33
+ else
34
+ chosen.add(option.value);
35
+ // Keep the OPTIONS' declared order, so the emitted array reads the way the form
36
+ // lists the choices rather than the order the chips were pressed.
37
+ props.onValueChange(options.map((candidate) => candidate.value).filter((v) => chosen.has(v)));
38
+ };
39
+ const onChipKeyDown = (event) => {
40
+ if (disabled || enabledIndices.length === 0)
41
+ return;
42
+ const position = enabledIndices.indexOf(rovingIndex);
43
+ let nextPosition;
44
+ switch (event.key) {
45
+ case 'ArrowRight':
46
+ case 'ArrowDown':
47
+ nextPosition = (position + 1) % enabledIndices.length;
48
+ break;
49
+ case 'ArrowLeft':
50
+ case 'ArrowUp':
51
+ nextPosition = (position - 1 + enabledIndices.length) % enabledIndices.length;
52
+ break;
53
+ case 'Home':
54
+ nextPosition = 0;
55
+ break;
56
+ case 'End':
57
+ nextPosition = enabledIndices.length - 1;
58
+ break;
59
+ default:
60
+ return;
61
+ }
62
+ event.preventDefault();
63
+ const nextIndex = enabledIndices[nextPosition];
64
+ if (nextIndex === undefined)
65
+ return;
66
+ const nextOption = options[nextIndex];
67
+ if (nextOption === undefined)
68
+ return;
69
+ focusChip(nextIndex);
70
+ // A radiogroup selects as it moves; a multi-select group only moves focus and
71
+ // leaves Space/Enter to toggle.
72
+ if (props.mode === 'single')
73
+ props.onValueChange(nextOption.value);
74
+ };
75
+ return (_jsx("div", { role: props.mode === 'single' ? 'radiogroup' : 'group', className: "tai-row", "aria-describedby": field['aria-describedby'], children: options.map((option, index) => {
76
+ const selected = isSelected(option);
77
+ return (_jsx("button", { ref: (element) => {
78
+ chipRefs.current[index] = element;
79
+ }, type: "button", className: "tai-chip", role: props.mode === 'single' ? 'radio' : undefined, "aria-checked": props.mode === 'single' ? selected : undefined, "aria-pressed": props.mode === 'multi' ? selected : undefined, "aria-invalid": field['aria-invalid'], tabIndex: index === rovingIndex ? 0 : -1, disabled: disabled || option.disabled === true, onClick: () => {
80
+ focusChip(index);
81
+ select(option);
82
+ }, onKeyDown: onChipKeyDown, children: option.label }, option.value));
83
+ }) }));
84
+ }
85
+ //# sourceMappingURL=chip-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip-group.js","sourceRoot":"","sources":["../../src/components/chip-group.tsx"],"names":[],"mappings":"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"}
@@ -1061,11 +1061,16 @@
1061
1061
  color var(--tai-motion-fast) ease;
1062
1062
  }
1063
1063
 
1064
- .tai-chip:not(.tai-chip-static):not([aria-pressed='true']):hover:not(:disabled) {
1064
+ .tai-chip:not(.tai-chip-static):not([aria-pressed='true']):not([aria-checked='true']):hover:not(
1065
+ :disabled
1066
+ ) {
1065
1067
  background: var(--tai-color-surface);
1066
1068
  }
1067
1069
 
1068
- .tai-chip[aria-pressed='true'] {
1070
+ /* A selected chip, pressed (a multi-select toggle) OR checked (a single-select
1071
+ radio chip): both wear the accent tint. */
1072
+ .tai-chip[aria-pressed='true'],
1073
+ .tai-chip[aria-checked='true'] {
1069
1074
  background: var(--tai-color-accent-tint);
1070
1075
  border-color: var(--tai-color-accent);
1071
1076
  color: var(--tai-color-accent-on-tint);
@@ -1073,7 +1078,8 @@
1073
1078
 
1074
1079
  /* A selected chip KEEPS its tint on hover and strengthens its border instead —
1075
1080
  the one part that moves in both themes (see the segment rule above). */
1076
- .tai-chip[aria-pressed='true']:hover:not(:disabled) {
1081
+ .tai-chip[aria-pressed='true']:hover:not(:disabled),
1082
+ .tai-chip[aria-checked='true']:hover:not(:disabled) {
1077
1083
  border-color: var(--tai-color-accent-hover);
1078
1084
  }
1079
1085
 
@@ -2075,6 +2081,13 @@
2075
2081
  border-bottom: 1px solid var(--tai-color-border);
2076
2082
  }
2077
2083
 
2084
+ /* The bar already pads its edges, so the brand drops its own inline padding here:
2085
+ at 320 px the brand, the three-option theme switch and the menu button then fit
2086
+ on one row, and the switch never wraps into a box taller than the bar. */
2087
+ .tai-topbar .tai-brand {
2088
+ padding-inline: 0;
2089
+ }
2090
+
2078
2091
  /* -- Master / detail ---------------------------------------------------------------
2079
2092
  `data-pane` drives the layout at every width: `list` gives the list the full
2080
2093
  width with no empty detail pane; `detail` shows a balanced two-pane split.
@@ -1 +1 @@
1
- {"version":3,"file":"execution-key-picker.js","sourceRoot":"","sources":["../../src/components/execution-key-picker.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAgBlC,2CAA2C;AAC3C,MAAM,UAAU,uBAAuB,CAAC,KAAwB;IAC9D,OAAO,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,sFAAsF;AACtF,SAAS,cAAc,CAAC,GAA0B;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;IAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,KAAK,GAAI,IAAgC,CAAC,eAAe,CAAC;IAChE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,iFAAiF;AACjF,SAAS,QAAQ,CAAC,GAA0B;IAC1C,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;SAClD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC;SACnD,IAAI,CAAC,KAAK,CAAC,CAAC;IACf,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,MAAM,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,8EAA8E;AAC9E,SAAS,YAAY,CAAC,IAAmB;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAWD,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,KAAK,EACL,aAAa,EACb,KAAK,GACmB;IACxB,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAEjD,OAAO,CACL,KAAC,KAAK,IACJ,KAAK,EAAC,eAAe,EACrB,WAAW,EAAC,4KAAuK;QACnL,8DAA8D;QAC9D,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;QACrD,sEAAsE;QACtE,qEAAqE;QACrE,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,YAEhC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,KAAC,UAAU,IACT,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAClC,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC,GACD,CACH,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACd,YAAG,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,8FAEvE,CACL,CAAC,CAAC,CAAC,CACF,KAAC,MAAM,IACL,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACpD,KAAK,EAAE,GAAG,CAAC,OAAO;gBAClB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;aACrB,CAAC,CAAC,EACH,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,yBAAyB,EAC1E,QAAQ,EAAE,KAAK,CAAC,SAAS,EACzB,aAAa,EAAE,aAAa,GAC5B,CACH,GACK,CACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"execution-key-picker.js","sourceRoot":"","sources":["../../src/components/execution-key-picker.tsx"],"names":[],"mappings":"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"}
@@ -4,23 +4,17 @@
4
4
  * `ExtensionPicker`. Kept free of React so the grouping logic is unit-tested
5
5
  * directly.
6
6
  *
7
- * The `/api/extensions` catalog is a flat list of `{ name, kind }` entries. Two
7
+ * The `/api/extensions` catalog is a flat list of `{ name, kind, multiple }` entries. Two
8
8
  * independent groupings live here:
9
9
  * - `groupIntoFamilies` groups a tool's composed branch VARIANTS (which share a
10
10
  * base tool name and append underscore suffixes — `tool`, `tool_a`, `tool_a_b`)
11
11
  * back into one FAMILY keyed by that base name (the catalog view);
12
- * - `groupByKind` groups the catalog by extension KIND (the picker view), where
13
- * the `backend` kind is the single non-stackable one.
12
+ * - `groupByKind` groups the catalog by extension KIND (the picker view), each
13
+ * group carrying the served `multiple` flag of its kind.
14
14
  * `kindVariant` maps each serialized `kind` value to a design-system Badge variant.
15
15
  */
16
16
  import type { Extension } from '@tai42/api-client';
17
17
  import type { BadgeProps } from './badge';
18
- /**
19
- * The single non-stackable extension kind: at most one `backend` extension may
20
- * appear in a combo (the `backend` kind is declared non-stackable, `multiple=False`).
21
- * The `ExtensionPicker` enforces single-select for this kind.
22
- */
23
- export declare const NON_STACKABLE_KIND = "backend";
24
18
  /** One base tool and every extension entry that branches from it. */
25
19
  export interface ExtensionFamily {
26
20
  /** The base tool name (the segment before the first underscore). */
@@ -32,8 +26,9 @@ export interface ExtensionFamily {
32
26
  export interface ExtensionKindGroup {
33
27
  /** The serialized kind value (`wrapper` / `transformer` / `backend`). */
34
28
  readonly kind: string;
35
- /** Whether this kind is non-stackable (single-select in the picker). */
36
- readonly nonStackable: boolean;
29
+ /** Whether a combo may carry several extensions of this kind; `false` is single-select
30
+ * in the picker. Served per kind by the catalog. */
31
+ readonly multiple: boolean;
37
32
  /** The kind's entries, ordered by name. */
38
33
  readonly members: readonly Extension[];
39
34
  }
@@ -52,7 +47,8 @@ export declare function groupIntoFamilies(extensions: readonly Extension[]): Ext
52
47
  /**
53
48
  * Group a flat extension list by `kind`, for the picker. Groups are ordered by
54
49
  * kind and each group's members by name, so the render order is stable regardless
55
- * of the server's list order. The `backend` group is flagged non-stackable.
50
+ * of the server's list order. Each group carries its kind's served `multiple`; a kind
51
+ * whose entries disagree is a catalog fault and throws.
56
52
  */
57
53
  export declare function groupByKind(extensions: readonly Extension[]): ExtensionKindGroup[];
58
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"extension-grouping.d.ts","sourceRoot":"","sources":["../../src/components/extension-grouping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;CACxC;AAED,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,eAAe,EAAE,CAiBrF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,kBAAkB,EAAE,CAiBlF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAO5E"}
1
+ {"version":3,"file":"extension-grouping.d.ts","sourceRoot":"","sources":["../../src/components/extension-grouping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;CACxC;AAED,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;yDACqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,eAAe,EAAE,CAiBrF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,kBAAkB,EAAE,CAsBlF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAO5E"}
@@ -1,9 +1,3 @@
1
- /**
2
- * The single non-stackable extension kind: at most one `backend` extension may
3
- * appear in a combo (the `backend` kind is declared non-stackable, `multiple=False`).
4
- * The `ExtensionPicker` enforces single-select for this kind.
5
- */
6
- export const NON_STACKABLE_KIND = 'backend';
7
1
  /**
8
2
  * The base tool name a variant belongs to: the substring before the first
9
3
  * underscore, or the whole name when it has none. `tool`, `tool_a`, `tool_a_b`
@@ -40,24 +34,27 @@ export function groupIntoFamilies(extensions) {
40
34
  /**
41
35
  * Group a flat extension list by `kind`, for the picker. Groups are ordered by
42
36
  * kind and each group's members by name, so the render order is stable regardless
43
- * of the server's list order. The `backend` group is flagged non-stackable.
37
+ * of the server's list order. Each group carries its kind's served `multiple`; a kind
38
+ * whose entries disagree is a catalog fault and throws.
44
39
  */
45
40
  export function groupByKind(extensions) {
46
41
  const byKind = new Map();
47
42
  for (const extension of extensions) {
48
- const members = byKind.get(extension.kind);
49
- if (members) {
50
- members.push(extension);
43
+ const group = byKind.get(extension.kind);
44
+ if (group === undefined) {
45
+ byKind.set(extension.kind, { multiple: extension.multiple, members: [extension] });
46
+ continue;
51
47
  }
52
- else {
53
- byKind.set(extension.kind, [extension]);
48
+ if (group.multiple !== extension.multiple) {
49
+ throw new Error(`extension kind ${extension.kind} is served as both single- and multi-select`);
54
50
  }
51
+ group.members.push(extension);
55
52
  }
56
53
  return [...byKind.entries()]
57
- .map(([kind, members]) => ({
54
+ .map(([kind, group]) => ({
58
55
  kind,
59
- nonStackable: kind === NON_STACKABLE_KIND,
60
- members: [...members].sort((a, b) => a.name.localeCompare(b.name)),
56
+ multiple: group.multiple,
57
+ members: [...group.members].sort((a, b) => a.name.localeCompare(b.name)),
61
58
  }))
62
59
  .sort((a, b) => a.kind.localeCompare(b.kind));
63
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extension-grouping.js","sourceRoot":"","sources":["../../src/components/extension-grouping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extension-grouping.js","sourceRoot":"","sources":["../../src/components/extension-grouping.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,9 @@
6
6
  * live in the SDK). It is PRESENTATIONAL: the caller fetches `available` and owns
7
7
  * the selected `value`; this component fetches nothing.
8
8
  *
9
- * The catalog is GROUPED by `kind`. The `backend` kind is the single NON-STACKABLE
10
- * one (`multiple=False`), so it is SINGLE-SELECT — checking a backend
11
- * extension replaces any other backend already in the combo; every other kind is
12
- * freely multi-select. Selection order is preserved (the combo is ordered — the
9
+ * The catalog is GROUPED by `kind`. A kind the catalog serves as not `multiple` is
10
+ * SINGLE-SELECT — checking one of its extensions replaces any other of that kind
11
+ * already in the combo; a `multiple` kind is freely multi-select. Selection order is preserved (the combo is ordered — the
13
12
  * stacking order that produces the branch tool name), so a newly-checked extension
14
13
  * appends to the end and unchecking removes in place.
15
14
  *
@@ -1 +1 @@
1
- {"version":3,"file":"extension-picker.d.ts","sourceRoot":"","sources":["../../src/components/extension-picker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAOnD,MAAM,WAAW,oBAAoB;IACnC,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAC;IACzC,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAA6B,GAC9B,EAAE,oBAAoB,+BA8DtB"}
1
+ {"version":3,"file":"extension-picker.d.ts","sourceRoot":"","sources":["../../src/components/extension-picker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAOnD,MAAM,WAAW,oBAAoB;IACnC,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAC;IACzC,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAA6B,GAC9B,EAAE,oBAAoB,+BA8DtB"}
@@ -13,26 +13,26 @@ export function ExtensionPicker({ available, value, onChange, disabled, idPrefix
13
13
  return (_jsx("div", { "data-testid": idPrefix, className: "tai-stack", children: _jsx(EmptyState, { title: "No extensions are available." }) }));
14
14
  }
15
15
  /**
16
- * Toggle a single extension. For a NON-STACKABLE kind (`backend`), checking one
17
- * first strips any other selected member of that kind before appending, so the
18
- * combo carries at most one backend; unchecking just removes it. Order is
19
- * preserved: a newly-checked name lands at the end.
16
+ * Toggle a single extension. For a kind the catalog serves as not `multiple`,
17
+ * checking one first strips any other selected member of that kind before
18
+ * appending, so the combo carries at most one of it; unchecking just removes it.
19
+ * Order is preserved: a newly-checked name lands at the end.
20
20
  */
21
- const toggle = (extension, nonStackable, checked) => {
21
+ const toggle = (extension, multiple, checked) => {
22
22
  if (!checked) {
23
23
  onChange(value.filter((name) => name !== extension.name));
24
24
  return;
25
25
  }
26
26
  if (selected.has(extension.name))
27
27
  return;
28
- const siblingNames = nonStackable
29
- ? new Set(available.filter((e) => e.kind === extension.kind).map((e) => e.name))
30
- : undefined;
28
+ const siblingNames = multiple
29
+ ? undefined
30
+ : new Set(available.filter((e) => e.kind === extension.kind).map((e) => e.name));
31
31
  const kept = siblingNames === undefined ? [...value] : value.filter((name) => !siblingNames.has(name));
32
32
  onChange([...kept, extension.name]);
33
33
  };
34
- return (_jsx("div", { "data-testid": idPrefix, className: "tai-stack", children: groups.map((group) => (_jsxs("div", { className: "tai-stack tai-stack-2", children: [_jsxs("div", { className: "tai-row", children: [_jsx(Badge, { variant: kindVariant(group.kind), children: group.kind }), group.nonStackable ? _jsx("span", { className: "tai-muted", children: "(single-select)" }) : null] }), _jsx("div", { className: "tai-row", children: group.members.map((extension) => (_jsx(Checkbox, { label: extension.name, checked: selected.has(extension.name), disabled: disabled, onCheckedChange: (checked) => {
35
- toggle(extension, group.nonStackable, checked);
34
+ return (_jsx("div", { "data-testid": idPrefix, className: "tai-stack", children: groups.map((group) => (_jsxs("div", { className: "tai-stack tai-stack-2", children: [_jsxs("div", { className: "tai-row", children: [_jsx(Badge, { variant: kindVariant(group.kind), children: group.kind }), group.multiple ? null : _jsx("span", { className: "tai-muted", children: "(single-select)" })] }), _jsx("div", { className: "tai-row", children: group.members.map((extension) => (_jsx(Checkbox, { label: extension.name, checked: selected.has(extension.name), disabled: disabled, onCheckedChange: (checked) => {
35
+ toggle(extension, group.multiple, checked);
36
36
  } }, extension.name))) })] }, group.kind))) }));
37
37
  }
38
38
  //# sourceMappingURL=extension-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension-picker.js","sourceRoot":"","sources":["../../src/components/extension-picker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extension-picker.js","sourceRoot":"","sources":["../../src/components/extension-picker.tsx"],"names":[],"mappings":"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"}
@@ -14,8 +14,8 @@
14
14
  * framing and points the operator back at re-running the deregister, because a
15
15
  * reload would re-attach the very server being detached — the wrong remediation.
16
16
  *
17
- * A `converged` summary (every worker applied, or a lone-worker local-only change)
18
- * renders NOTHING — the calling surface shows its own success. A `degraded` summary
17
+ * A `converged` summary (every worker applied, or a lone-worker local-only change) with
18
+ * no worker awaiting a respawn renders NOTHING — the calling surface shows its own success. A `degraded` summary
19
19
  * (the bus was reached but a sibling did not confirm) or an `unreachable` summary (the
20
20
  * bus itself failed) renders a loud `role="alert"` panel naming the honest per-worker
21
21
  * outcomes: `failed` / `missing` / `departed` / `timed_out` / `resyncing` / `recycling` /
@@ -23,6 +23,10 @@
23
23
  * server-supplied string (a worker name, an error/detail message) renders as escaped
24
24
  * React text, never an HTML sink.
25
25
  *
26
+ * Whatever the status, a worker whose reload named recycle-class settings awaiting a
27
+ * respawn is listed in a warning status panel beside it: the reload applied every other
28
+ * change, and those settings take effect only when that worker restarts.
29
+ *
26
30
  * Every state — the headline and each worker's outcome — is a `tai-status` line: an
27
31
  * icon MARK plus a word LABEL, with the tone color only reinforcing them, so the
28
32
  * report is readable without color perception.
@@ -30,9 +34,10 @@
30
34
  import type { FleetReportSummary } from '@tai42/api-client';
31
35
  import type { ReactNode } from 'react';
32
36
  /**
33
- * Render a fleet broadcast's failure state. Returns `null` for a converged/absent
34
- * report (nothing to warn about) so callers can always mount it unconditionally
35
- * beside their own success line.
37
+ * Render a fleet broadcast's failure state and its workers awaiting a respawn. Returns
38
+ * `null` for an absent report or a converged one with no worker awaiting a respawn
39
+ * (nothing to warn about) so callers can always mount it unconditionally beside their
40
+ * own success line.
36
41
  */
37
42
  export interface FleetReportProps {
38
43
  readonly summary: FleetReportSummary | null;
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-report.d.ts","sourceRoot":"","sources":["../../src/components/fleet-report.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAyCvC;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5C;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;CAC/D;AAyGD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,MAAe,EAAE,EAAE,gBAAgB,GAAG,SAAS,CAwBrF"}
1
+ {"version":3,"file":"fleet-report.d.ts","sourceRoot":"","sources":["../../src/components/fleet-report.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAEV,kBAAkB,EAGnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAyCvC;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5C;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;CAC/D;AA6KD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,MAAe,EAAE,EAAE,gBAAgB,GAAG,SAAS,CASrF"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { AlertTriangleIcon, PendingIcon, XCircleIcon } from './icons';
3
3
  /** Human labels for the per-worker non-applied outcomes. */
4
4
  const OUTCOME_LABEL = {
@@ -78,8 +78,18 @@ function DegradedReport({ failures, savedFraming, remediation, }) {
78
78
  return (_jsxs("li", { className: "tai-row", children: [_jsx("span", { className: "tai-mono", children: failure.name }), _jsxs("span", { className: `tai-status ${tone}`, children: [_jsx(Icon, {}), OUTCOME_LABEL[failure.outcome]] }), failure.message !== null ? (_jsx("span", { className: "tai-muted", children: failure.message })) : null] }, failure.name));
79
79
  }) })] }));
80
80
  }
81
- export function FleetReport({ summary, action = 'save' }) {
82
- if (summary === null || summary.status === 'converged')
81
+ /**
82
+ * The panel for workers whose reload named recycle-class settings awaiting a respawn:
83
+ * the reload applied everything else, and these take effect only when the worker
84
+ * restarts. Guidance the operator acts on, not a failure, so it is a warning status
85
+ * rather than an alert.
86
+ */
87
+ function AwaitingRespawnReport({ awaiting, }) {
88
+ const count = awaiting.length;
89
+ return (_jsxs("div", { role: "status", className: "tai-warn-state tai-stack tai-stack-2", children: [_jsxs("strong", { className: "tai-status tai-status-warn", children: [_jsx(AlertTriangleIcon, {}), `${String(count)} worker${count === 1 ? ' needs' : 's need'} a restart to apply some settings`] }), _jsx("p", { children: "These settings changed in the stored environment after the worker started. The reload applied every other change; these take effect only when the worker restarts. Restart it through your deployment\u2019s supervisor (on a bare server, restart the server)." }), _jsx("ul", { className: "tai-stack tai-stack-2", children: awaiting.map((worker) => (_jsxs("li", { className: "tai-row", children: [_jsx("span", { className: "tai-mono", children: worker.name }), _jsx("span", { className: "tai-muted", children: "waits for a restart:" }), _jsx("span", { className: "tai-mono", children: worker.keys.join(', ') })] }, worker.name))) })] }));
90
+ }
91
+ function FailureReport({ summary, action, }) {
92
+ if (summary.status === 'converged')
83
93
  return null;
84
94
  // Only a saved config change carries the "Change saved" framing; a reload or a
85
95
  // deregister saved nothing.
@@ -89,4 +99,11 @@ export function FleetReport({ summary, action = 'save' }) {
89
99
  }
90
100
  return (_jsx(DegradedReport, { failures: summary.failures, savedFraming: savedFraming, remediation: remediationText(action, 'degraded') }));
91
101
  }
102
+ export function FleetReport({ summary, action = 'save' }) {
103
+ if (summary === null)
104
+ return null;
105
+ if (summary.status === 'converged' && summary.awaiting.length === 0)
106
+ return null;
107
+ return (_jsxs(_Fragment, { children: [_jsx(FailureReport, { summary: summary, action: action }), summary.awaiting.length > 0 ? _jsx(AwaitingRespawnReport, { awaiting: summary.awaiting }) : null] }));
108
+ }
92
109
  //# sourceMappingURL=fleet-report.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-report.js","sourceRoot":"","sources":["../../src/components/fleet-report.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-report.js","sourceRoot":"","sources":["../../src/components/fleet-report.tsx"],"names":[],"mappings":"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"}
@@ -34,8 +34,18 @@ export declare function containerSummary(value: unknown, count: number): string;
34
34
  * key that itself contains the separator cannot collide with a different path.
35
35
  */
36
36
  export declare function childPath(parent: string, name: string): string;
37
- /** The default open state a call site's `defaultExpanded` selects. */
38
- export type Baseline = 'depth' | 'expanded' | 'collapsed';
37
+ /**
38
+ * The identities of every container a caller's named paths open: each path is a
39
+ * list of keys from the root (an array item named by its index), and the root,
40
+ * every container along the path and the one it ends at are all opened.
41
+ */
42
+ export declare function namedOpenPaths(paths: readonly (readonly string[])[]): ReadonlySet<string>;
43
+ /**
44
+ * The open state the nodes start from: the three a call site's `defaultExpanded`
45
+ * selects (the depth-guarded default, expand-all, collapsed), and `closed`, the
46
+ * reader's collapse-all, which also shuts the caller's named paths.
47
+ */
48
+ export type Baseline = 'depth' | 'expanded' | 'collapsed' | 'closed';
39
49
  export declare function initialBaseline(defaultExpanded: boolean | undefined): Baseline;
40
50
  /**
41
51
  * The set of paths EXPAND-ALL auto-opens: a breadth-first sweep that opens each
@@ -47,10 +57,12 @@ export declare function initialBaseline(defaultExpanded: boolean | undefined): B
47
57
  */
48
58
  export declare function expandedOpenPaths(root: unknown): ReadonlySet<string>;
49
59
  /**
50
- * Whether a node is open, from the baseline and the reader's own toggles. An
51
- * explicit toggle always wins; otherwise the baseline decides — the depth-guarded
52
- * default opens through {@link AUTO_EXPAND_DEPTH}, expand-all opens the budgeted
53
- * breadth-first set, collapse-all opens nothing.
60
+ * Whether a node is open, from the baseline, the caller's named paths and the
61
+ * reader's own toggles. An explicit toggle always wins; the reader's collapse-all
62
+ * opens nothing; otherwise a node on a named path is open beside any baseline a call
63
+ * site selects, and the baseline decides the rest — a collapsed baseline opens
64
+ * nothing else, the depth-guarded default opens through {@link AUTO_EXPAND_DEPTH},
65
+ * expand-all opens the budgeted breadth-first set.
54
66
  */
55
- export declare function computeOpen(baseline: Baseline, overrides: ReadonlyMap<string, boolean>, expandedPaths: ReadonlySet<string> | null, path: string, depth: number): boolean;
67
+ export declare function computeOpen(baseline: Baseline, overrides: ReadonlyMap<string, boolean>, expandedPaths: ReadonlySet<string> | null, namedPaths: ReadonlySet<string>, path: string, depth: number): boolean;
56
68
  //# sourceMappingURL=json-tree-model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-tree-model.d.ts","sourceRoot":"","sources":["../../src/components/json-tree-model.ts"],"names":[],"mappings":"AAOA,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,8EAA8E;AAC9E,eAAO,MAAM,SAAS,MAAM,CAAC;AAE7B;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIrD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAU7E;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,sEAAsE;AACtE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;AAE1D,wBAAgB,eAAe,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAI9E;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CA4BpE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,EACzC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAMT"}
1
+ {"version":3,"file":"json-tree-model.d.ts","sourceRoot":"","sources":["../../src/components/json-tree-model.ts"],"names":[],"mappings":"AAQA,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,8EAA8E;AAC9E,eAAO,MAAM,SAAS,MAAM,CAAC;AAE7B;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIrD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAU7E;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAWzF;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAErE,wBAAgB,eAAe,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAI9E;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CA4BpE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,EACzC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAQT"}