@lloyal-labs/dev-tools 0.5.0-alpha.5 → 0.5.0-alpha.8

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/dist/react.js CHANGED
@@ -17,7 +17,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
17
17
  */
18
18
  import React, { useEffect, useMemo, useRef, useState } from 'react';
19
19
  import { useStore } from 'zustand';
20
- import { pressureStrip, pressurePercent, readConfigPath, lanePpl, isLive, KEY_TIERS, } from './index.js';
20
+ import { pressureStrip, pressurePercent, readConfigPath, lanePpl, isLive, configRows, configCommand, liveConfigKeys, changing, } from './index.js';
21
21
  import { devStoreFor, EDGE_STEP } from './store.js';
22
22
  // ── palette: monochrome chrome, color reserved for data ──
23
23
  const C = {
@@ -246,7 +246,7 @@ function runEndS(m) {
246
246
  return m.runStartAt === null ? 0 : Math.max(0, (end - m.runStartAt) / 1000);
247
247
  }
248
248
  // ═══════════════════════════════════════════════════════════════
249
- export function DevPane({ bridge, controls = [], title, runCommands = {}, framing, children }) {
249
+ export function DevPane({ bridge, config, title, runCommands = {}, framing, children }) {
250
250
  // The store is a per-bridge SINGLETON: a remount reattaches to the running
251
251
  // fold (full history intact) instead of restarting it and desyncing. It is
252
252
  // deliberately NOT destroyed on unmount — it lives with the page, like the
@@ -328,13 +328,13 @@ export function DevPane({ bridge, controls = [], title, runCommands = {}, framin
328
328
  } }), m.clarifying ? '?' : liveCount > 0 ? liveCount : '!'] })), _jsx("span", { children: summary })] }), toast && _jsx(Notice, { at: toastAt, text: toast }), _jsx("span", { style: { flex: 1 } }), _jsxs("span", { "aria-hidden": "true", style: { display: 'inline-flex', alignItems: 'center', gap: 14 }, children: [_jsx(MiniSpark, { heading: "context", color: C.agent, values: barStrip.map((p) => p.pct), value: barPct === null ? '—' : `${barPct}%` }), _jsx(MiniSpark, { heading: "cpu", color: HOST_CPU, values: barHost.map((h) => h.cpu), value: barLast ? `${barLast.cpu}%` : '—' }), _jsx(MiniSpark, { heading: "mem", color: "#9aa0a6", values: barHost.filter((h) => h.memUsedMb !== null).map((h) => h.memUsedMb), value: barLast && barLast.memUsedMb !== null && barLast.memTotalMb > 0
329
329
  ? `${(barLast.memUsedMb / 1024).toFixed(1)} / ${Math.round(barLast.memTotalMb / 1024)}G` : '—' }), _jsx(MiniSpark, { heading: "harness", color: "#5f6368", values: barHost.map((h) => h.rssMb), value: barLast ? `${(barLast.rssMb / 1024).toFixed(1)}G` : '—' })] }), _jsx("span", { style: { flex: 1 } }), _jsx("span", { style: { color: C.faint }, "aria-hidden": "true", children: "click to expand" })] }));
330
330
  }
331
- return shell(_jsx(Pane, { store: store, m: m, rev: rev, controls: controls, title: title, runCommands: runCommands, onClose: () => setOpen(false),
331
+ return shell(_jsx(Pane, { store: store, m: m, rev: rev, config: config, title: title, runCommands: runCommands, onClose: () => setOpen(false),
332
332
  // Thumbnails resolve through the bridge when the harness exposes a
333
333
  // content route; the pane never learns the transport, only the URL.
334
334
  mediaUrl: bridge.representationUrl ? (d, i) => bridge.representationUrl(d, i) : undefined }));
335
335
  }
336
336
  // ═══ the docked pane ═══
337
- function Pane({ store, m, rev, controls, title, runCommands, onClose, mediaUrl }) {
337
+ function Pane({ store, m, rev, config, title, runCommands, onClose, mediaUrl }) {
338
338
  const [tab, setTab] = useState('timeline');
339
339
  const [selAgent, setSelAgent] = useState(null);
340
340
  const [feedW, setFeedW] = useState(feedWidthPref);
@@ -404,7 +404,7 @@ function Pane({ store, m, rev, controls, title, runCommands, onClose, mediaUrl }
404
404
  : 'finish up — agents wrap up and report; the trajectory is kept', style: m.pausedAt !== null || m.windingDownAt !== null
405
405
  ? { ...runBtn, opacity: 0.4, cursor: 'default' } : runBtn, children: m.windingDownAt !== null ? 'finishing…' : 'finish up' })), runCommands.stop && (_jsx("button", { onClick: () => store.send({ type: 'stop' }), title: "halt the run", style: { ...runBtn, color: C.fail, borderColor: '#f0c4c1' }, children: "stop" }))] })), _jsxs("span", { style: { fontFamily: mono, display: 'inline-flex', alignItems: 'center', gap: 7 }, children: [_jsx("span", { style: { width: 7, height: 7, borderRadius: '50%', background: live ? (m.pausedAt !== null ? C.warn : C.ok) : C.faint } }), live
406
406
  ? (m.pausedAt !== null ? 'paused' : m.windingDownAt !== null ? 'finishing' : 'live')
407
- : m.runStartAt === null ? 'idle' : 'run complete'] }), _jsx("span", { style: { cursor: 'pointer', color: C.dim }, onClick: onClose, title: "collapse to the cog", children: "\u2715" })] })] }), tab === 'timeline' && (_jsxs("div", { style: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsx(Timeline, { m: m, rev: rev, store: store, selAgent: selAgent, onSelect: setSelAgent, toolColor: toolColor }), selAgent === 'spine' && m.spine && (_jsxs(_Fragment, { children: [_jsx(FeedResizer, { width: feedW, onWidth: (w) => { feedWidthPref = w; setFeedW(w); } }), _jsx(SpineFeed, { m: m, onClose: () => setSelAgent(null), width: feedW, mediaUrl: mediaUrl, toolColor: toolColor })] })), selAgent === 'trunk' && m.trunk.length > 0 && (_jsxs(_Fragment, { children: [_jsx(FeedResizer, { width: feedW, onWidth: (w) => { feedWidthPref = w; setFeedW(w); } }), _jsx(TrunkFeed, { m: m, onClose: () => setSelAgent(null), width: feedW, mediaUrl: mediaUrl })] })), typeof selAgent === 'number' && m.lanes.has(selAgent) && (_jsxs(_Fragment, { children: [_jsx(FeedResizer, { width: feedW, onWidth: (w) => { feedWidthPref = w; setFeedW(w); } }), _jsx(AgentFeed, { m: m, lane: m.lanes.get(selAgent), toolColor: toolColor, onClose: () => setSelAgent(null), onJump: setSelAgent, nowMs: store.getState().paintedAt, width: feedW, send: (c) => store.send(c), canCancel: !!runCommands.cancelAgent })] }))] })), tab === 'sources' && _jsx(Sources, { m: m, toolColor: toolColor }), tab === 'settings' && _jsx(Settings, { m: m, controls: controls, send: (c) => store.send(c) }), _jsxs("div", { style: {
407
+ : m.runStartAt === null ? 'idle' : 'run complete'] }), _jsx("span", { style: { cursor: 'pointer', color: C.dim }, onClick: onClose, title: "collapse to the cog", children: "\u2715" })] })] }), tab === 'timeline' && (_jsxs("div", { style: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsx(Timeline, { m: m, rev: rev, store: store, selAgent: selAgent, onSelect: setSelAgent, toolColor: toolColor }), selAgent === 'spine' && m.spine && (_jsxs(_Fragment, { children: [_jsx(FeedResizer, { width: feedW, onWidth: (w) => { feedWidthPref = w; setFeedW(w); } }), _jsx(SpineFeed, { m: m, onClose: () => setSelAgent(null), width: feedW, mediaUrl: mediaUrl, toolColor: toolColor })] })), selAgent === 'trunk' && m.trunk.length > 0 && (_jsxs(_Fragment, { children: [_jsx(FeedResizer, { width: feedW, onWidth: (w) => { feedWidthPref = w; setFeedW(w); } }), _jsx(TrunkFeed, { m: m, onClose: () => setSelAgent(null), width: feedW, mediaUrl: mediaUrl })] })), typeof selAgent === 'number' && m.lanes.has(selAgent) && (_jsxs(_Fragment, { children: [_jsx(FeedResizer, { width: feedW, onWidth: (w) => { feedWidthPref = w; setFeedW(w); } }), _jsx(AgentFeed, { m: m, lane: m.lanes.get(selAgent), toolColor: toolColor, onClose: () => setSelAgent(null), onJump: setSelAgent, nowMs: store.getState().paintedAt, width: feedW, send: (c) => store.send(c), canCancel: !!runCommands.cancelAgent })] }))] })), tab === 'sources' && _jsx(Sources, { m: m, toolColor: toolColor }), tab === 'settings' && _jsx(Settings, { m: m, config: config, send: (c) => store.send(c) }), _jsxs("div", { style: {
408
408
  height: 24, display: 'flex', alignItems: 'center', gap: 14, padding: '0 12px',
409
409
  borderTop: `1px solid ${C.border}`, background: '#f8f9fa', fontSize: 10.5, color: C.dim, flex: 'none',
410
410
  }, children: [_jsxs("span", { style: { fontFamily: mono }, children: [m.runStartAt === null
@@ -1132,77 +1132,19 @@ const cutline = {
1132
1132
  borderTop: '1px dashed #dadce0', marginTop: 6,
1133
1133
  };
1134
1134
  // ═══ Settings: category nav → harness (master list + detail) · ability pages ═══
1135
- /** What the detail panel knows about each well-known harness key: what it is,
1136
- * and how to change it. Prose is product copy — one clause per sentence. */
1137
- /** Config path → the ConfigOrigin field carrying its rung, so the
1138
- * exception note (env/cli overrode the manifest) fires for read-only rows
1139
- * too — full-rung provenance display stays demoted by design. */
1140
- const ORIGIN_KEYS = {
1141
- 'model.path': 'modelPath',
1142
- 'model.reranker': 'reranker',
1143
- 'model.nCtx': 'nCtx',
1144
- 'model.gpu': 'gpu',
1145
- 'sources.outputDir': 'outputDir',
1146
- 'defaults.reasoningMode': 'reasoningMode',
1147
- };
1148
- const SETTING_META = {
1149
- 'defaults.effort': {
1150
- desc: 'Run effort preset — agent budget, planner breadth, recovery cap.',
1151
- how: 'Change it here; it applies to your next run and is remembered locally. The committed default lives in harness.yml → defaults.effort.',
1152
- },
1153
- 'defaults.reasoningMode': {
1154
- desc: 'flat runs one research wave over the plan; deep lets agents recurse into sub-plans.',
1155
- how: 'Change it here; it applies to your next run.',
1156
- },
1157
- 'model.imageMaxTokens': {
1158
- desc: 'Ceiling on what ONE image costs in KV. Measured on Qwen3.5 with a 176 KB photo: 564 cells uncapped, 251 at 256. Lower it to fit more images into a context; auto lets the model metadata decide.',
1159
- how: 'Change it here and the runtime reloads on the new value. It does NOT shrink the projector\u2019s warmup allocation, so it will not rescue a boot that runs out of GPU memory before any image arrives.',
1160
- },
1161
- 'model.imageMinTokens': {
1162
- desc: 'Floor on per-image detail. Grounding tasks need it high \u2014 llama.cpp warns Qwen-VL wants at least 1024 to read positions reliably.',
1163
- how: 'Change it here and the runtime reloads on the new value. Raise it if the model reads an image but places things wrongly in it.',
1164
- },
1165
- 'sources.outputDir': {
1166
- desc: 'Where per-query run-dirs and the session trace are written. Empty means where the harness started.',
1167
- how: 'Edit harness.yml → sources.outputDir; the next run picks it up.',
1168
- },
1169
- 'defaults.maxTurns': {
1170
- desc: 'Turn cap per agent run.',
1171
- how: 'Edit harness.yml → defaults.maxTurns; the next run picks it up.',
1172
- },
1173
- 'model.path': {
1174
- desc: 'Filesystem path or catalog id of the reasoning model.',
1175
- how: 'Saved changes load at the next start; this run keeps the model it booted with.',
1176
- },
1177
- 'model.reranker': {
1178
- desc: 'The admission judge — a pointwise yes/no reranker that gates what enters the context.',
1179
- how: 'Saved changes load at the next start.',
1180
- },
1181
- 'model.nCtx': {
1182
- desc: 'Context window of the one shared llama_context — every branch leases cells out of this budget.',
1183
- how: 'Edit harness.yml → model.llm.context, then restart.',
1184
- },
1185
- 'model.branches': {
1186
- desc: 'Concurrent sequences — createContext takes it as nSeqMax. Each sequence holds its own KV lease.',
1187
- how: 'Edit harness.yml → model.llm.branches, then restart.',
1188
- },
1189
- 'model.kvCache': {
1190
- desc: 'KV cache type for the attention layers — raise for precision, lower for memory.',
1191
- how: 'Edit harness.yml → model.llm.kvCache, then restart.',
1192
- },
1193
- 'model.gpu': {
1194
- desc: 'Which native backend the process loaded — picked once at start. A configured backend fails loud if unavailable, never silently CPU.',
1195
- how: 'A deploy choice: set harness.yml → model.llm.gpu (or LLOYAL_GPU), then restart.',
1196
- },
1197
- };
1198
1135
  const TIER_NOTE = {
1199
1136
  session: 'applies to the next run',
1200
1137
  reload: 'saved now — a restart loads it',
1201
1138
  boot: 'fixed for this run',
1202
1139
  };
1203
- function Settings({ m, controls, send }) {
1140
+ function Settings({ m, config, send }) {
1204
1141
  const [cat, setCat] = useState('harness');
1205
- const [selKey, setSelKey] = useState(controls[0]?.key ?? 'model.path');
1142
+ // With a table the rows are the application's own keys; without one, whatever config the harness announced.
1143
+ const rows = config
1144
+ ? configRows(config)
1145
+ : liveConfigKeys(m.config).map((key) => ({ key, applies: 'session', values: null }));
1146
+ // Open on the first thing that can be changed now, else the first that can be changed at all.
1147
+ const [selKey, setSelKey] = useState((rows.find((r) => r.values && r.applies === 'session') ?? rows.find((r) => r.values) ?? rows[0])?.key ?? '');
1206
1148
  // The nav lists INSTALLED abilities (`abilities:state` descriptors) — not
1207
1149
  // merely configured ones, or the page you'd use to configure an ability
1208
1150
  // could never appear. Harnesses that don't emit descriptors degrade to the
@@ -1222,60 +1164,41 @@ function Settings({ m, controls, send }) {
1222
1164
  borderLeft: on ? `3px solid ${C.text}` : '3px solid transparent',
1223
1165
  }, children: name }, name));
1224
1166
  return (_jsxs("div", { style: { flex: 1, minHeight: 0, display: 'flex' }, children: [_jsxs("div", { style: { width: 148, flex: 'none', borderRight: '1px solid #d9dce1', paddingTop: 10, background: C.panelBg, overflowY: 'auto' }, children: [navItem('harness', cat === 'harness'), abilities.length > 0 && _jsx("div", { style: { ...label, padding: '12px 16px 3px' }, children: "abilities" }), abilities.map((a) => navItem(a, cat === a))] }), cat === 'harness'
1225
- ? _jsx(HarnessSettings, { m: m, controls: controls, send: send, selKey: selKey, onSelect: setSelKey })
1167
+ ? _jsx(HarnessSettings, { m: m, rows: rows, tiered: config !== undefined, send: send, selKey: selKey, onSelect: setSelKey })
1226
1168
  : _jsx(AbilityPage, { m: m, name: cat, send: send })] }));
1227
1169
  }
1228
- /** A DevControl drawn as a stepped slider: the steps ARE `ctl.values`, in the
1229
- * order the template declared them, so there is no numeric range to keep in
1230
- * sync with the option list and no value can be selected that the command
1231
- * would not accept. Commits on release, not on drag \u2014 each change reloads
1232
- * the runtime, and every intermediate step would be a reload nobody asked
1233
- * for. */
1234
- function SteppedSlider({ ctl, value, onSelect, send }) {
1235
- const at = Math.max(0, ctl.values.indexOf(value ?? ''));
1236
- const [dragging, setDragging] = useState(null);
1237
- const shown = dragging ?? at;
1238
- const commit = (i) => {
1239
- setDragging(null);
1240
- if (ctl.values[i] !== value) {
1241
- onSelect();
1242
- send({ type: ctl.command, [ctl.field]: ctl.values[i] });
1243
- }
1244
- };
1245
- return (_jsxs("span", { onClick: (e) => e.stopPropagation(), style: { display: 'flex', alignItems: 'center', gap: 10, width: 276, flex: 'none' }, children: [_jsx("input", { type: "range", min: 0, max: ctl.values.length - 1, step: 1, value: shown, "aria-label": ctl.key, "aria-valuetext": String(ctl.values[shown]), onChange: (e) => setDragging(Number(e.target.value)), onPointerUp: (e) => commit(Number(e.target.value)), onKeyUp: (e) => commit(Number(e.target.value)), onBlur: () => setDragging(null), style: { flex: 1, accentColor: C.text, cursor: 'pointer', minWidth: 0 } }), _jsx("span", { style: {
1246
- fontFamily: mono, fontSize: 11, color: C.text, width: 46, flex: 'none',
1247
- textAlign: 'right', fontVariantNumeric: 'tabular-nums',
1248
- }, children: ctl.values[shown] })] }));
1249
- }
1250
- function HarnessSettings({ m, controls, send, selKey, onSelect }) {
1170
+ function HarnessSettings({ m, rows, tiered, send, selKey, onSelect }) {
1251
1171
  const config = m.config;
1252
- const byTier = (tier) => Object.entries(KEY_TIERS).filter(([, t]) => t === tier).map(([k]) => k);
1253
- const controlFor = (key) => controls.find((c) => c.key === key);
1254
- const row = (key) => {
1255
- const ctl = controlFor(key);
1256
- const value = ctl ? ctl.read(config) : readConfigPath(config, key);
1257
- if (value === undefined && !ctl)
1258
- return null; // skip-if-absent: basic has no defaults block
1172
+ const byTier = (tier) => rows.filter((r) => r.applies === tier);
1173
+ const row = (r) => {
1174
+ const { key } = r;
1175
+ const raw = readConfigPath(config, key); // a declared key the harness never set is still a row: its value is —
1176
+ // A value that is itself a table (an app's own structured key) is shown as it is written.
1177
+ const value = raw === undefined || raw === null ? undefined : typeof raw === 'object' ? JSON.stringify(raw) : String(raw);
1259
1178
  const selected = selKey === key;
1179
+ // Choosing the value already in force is a selection, never a command: on a reload row the command would
1180
+ // end the session to apply nothing.
1181
+ const choose = (v) => { onSelect(key); if (v === value)
1182
+ return; const command = configCommand(r, v); if (command)
1183
+ send(command); };
1260
1184
  return (_jsxs("div", { onClick: () => onSelect(key), role: "button", tabIndex: 0, onKeyDown: keyActivate(() => onSelect(key)), style: {
1261
1185
  display: 'flex', alignItems: 'center', gap: 8, padding: '5px 14px 5px 11px', minHeight: 36,
1262
1186
  borderLeft: selected ? `3px solid ${C.text}` : '3px solid transparent', cursor: 'pointer',
1263
1187
  background: selected ? C.chromeBg : undefined,
1264
- }, children: [_jsx("span", { style: { fontFamily: mono, fontSize: 11.5, fontWeight: 500 }, children: key }), _jsx("span", { style: { flex: 1 } }), ctl?.note && _jsx("span", { style: { color: C.faint, fontSize: 10.5, marginRight: 10, flex: 'none' }, children: ctl.note }), ctl?.render === 'slider' ? (_jsx(SteppedSlider, { ctl: ctl, value: value === undefined || value === null ? undefined : String(value), onSelect: () => onSelect(key), send: send })) : ctl ? (_jsx("span", { style: { display: 'flex', border: '1px solid #dadce0', borderRadius: 4, overflow: 'hidden', width: 276, flex: 'none' }, children: ctl.values.map((v) => (_jsx("span", { onClick: (e) => { e.stopPropagation(); onSelect(key); send({ type: ctl.command, [ctl.field]: v }); }, role: "button", tabIndex: 0, "aria-pressed": v === value, onKeyDown: keyActivate(() => { onSelect(key); send({ type: ctl.command, [ctl.field]: v }); }), style: {
1188
+ }, children: [_jsx("span", { style: { fontFamily: mono, fontSize: 11.5, fontWeight: 500 }, children: key }), _jsx("span", { style: { flex: 1 } }), r.values ? (_jsx("span", { style: { display: 'flex', border: '1px solid #dadce0', borderRadius: 4, overflow: 'hidden', width: 276, flex: 'none' }, children: r.values.map((v) => (_jsx("span", { onClick: (e) => { e.stopPropagation(); choose(v); }, role: "button", tabIndex: 0, "aria-pressed": v === value, onKeyDown: keyActivate(() => choose(v)), style: {
1265
1189
  flex: 1, fontSize: 11, padding: '5px 0', textAlign: 'center', cursor: 'pointer',
1266
1190
  background: v === value ? C.text : '#fff', color: v === value ? '#fff' : C.dim,
1267
1191
  fontWeight: v === value ? 500 : 400, borderLeft: '1px solid #e8eaed',
1268
- }, children: v }, v))) })) : (_jsxs("span", { style: { fontFamily: mono, fontSize: 11, color: C.dim, maxWidth: 300, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, children: [value === undefined || value === null || value === '' ? '—' : String(value), key === 'model.branches' && _jsx("span", { style: { color: C.faint }, children: " \u2192 nSeqMax" })] }))] }, key));
1192
+ }, children: v }, v))) })) : (_jsxs("span", { style: { fontFamily: mono, fontSize: 11, color: C.dim, maxWidth: 300, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, children: [value === undefined || value === '' ? '—' : value, key === 'model.branches' && _jsx("span", { style: { color: C.faint }, children: " \u2192 nSeqMax" })] }))] }, key));
1269
1193
  };
1270
1194
  const head = (t) => (_jsxs("div", { style: { display: 'flex', alignItems: 'baseline', gap: 8, padding: '13px 14px 3px' }, children: [_jsx("span", { style: label, children: t }), _jsx("span", { style: { color: C.faint, fontSize: 10.5 }, children: TIER_NOTE[t] })] }));
1271
- const meta = SETTING_META[selKey];
1272
- const tier = KEY_TIERS[selKey];
1195
+ const selected = rows.find((r) => r.key === selKey);
1196
+ const tier = tiered ? selected?.applies : undefined;
1273
1197
  // The exception case, surfaced exactly when true: something outside the
1274
- // manifest set this value. No badges anywhere else.
1275
- const originKey = controlFor(selKey)?.originKey ?? ORIGIN_KEYS[selKey];
1276
- const origin = originKey && m.origin ? m.origin[originKey] : undefined;
1198
+ // manifest set this value. No badges anywhere else. Provenance is keyed by the config path itself.
1199
+ const origin = m.origin ? m.origin[selKey] : undefined;
1277
1200
  const overridden = origin === 'env' || origin === 'cli';
1278
- return (_jsxs(_Fragment, { children: [_jsxs("div", { style: { flex: 1, minWidth: 0, overflowY: 'auto', paddingBottom: 10 }, children: [byTier('session').length > 0 && head('session'), byTier('session').map(row), byTier('reload').length > 0 && head('reload'), byTier('reload').map(row), byTier('boot').length > 0 && head('boot'), byTier('boot').map(row)] }), _jsxs("div", { style: { width: 400, flex: 'none', borderLeft: '1px solid #d9dce1', overflowY: 'auto', padding: '16px 20px', background: C.panelBg }, children: [meta ? (_jsxs(_Fragment, { children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [_jsx("span", { style: { fontFamily: mono, fontSize: 13, fontWeight: 500 }, children: selKey }), tier && _jsx("span", { style: chip, children: TIER_NOTE[tier] })] }), _jsx("p", { style: { maxWidth: 340, margin: '8px 0 0', fontSize: 12, lineHeight: 1.55, color: '#3c4043' }, children: meta.desc }), _jsx("div", { style: { ...label, marginTop: 16 }, children: "changing it" }), _jsx("p", { style: { maxWidth: 340, margin: '6px 0 0', fontSize: 12, lineHeight: 1.55, color: '#3c4043' }, children: meta.how }), overridden && (_jsxs("div", { style: {
1201
+ return (_jsxs(_Fragment, { children: [_jsx("div", { style: { flex: 1, minWidth: 0, overflowY: 'auto', paddingBottom: 10 }, children: tiered ? ['session', 'reload', 'boot'].map((t) => byTier(t).length > 0 && (_jsxs("div", { children: [head(t), byTier(t).map(row)] }, t))) : rows.map(row) }), _jsxs("div", { style: { width: 400, flex: 'none', borderLeft: '1px solid #d9dce1', overflowY: 'auto', padding: '16px 20px', background: C.panelBg }, children: [selected ? (_jsxs(_Fragment, { children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [_jsx("span", { style: { fontFamily: mono, fontSize: 13, fontWeight: 500 }, children: selKey }), tier && _jsx("span", { style: chip, children: TIER_NOTE[tier] })] }), selected.describe && (_jsx("p", { style: { maxWidth: 340, margin: '8px 0 0', fontSize: 12, lineHeight: 1.55, color: '#3c4043' }, children: selected.describe })), tiered && (_jsxs(_Fragment, { children: [_jsx("div", { style: { ...label, marginTop: 16 }, children: "changing it" }), _jsx("p", { style: { maxWidth: 340, margin: '6px 0 0', fontSize: 12, lineHeight: 1.55, color: '#3c4043' }, children: changing(selected) })] })), overridden && (_jsxs("div", { style: {
1279
1202
  display: 'flex', alignItems: 'baseline', gap: 8, padding: '8px 11px', marginTop: 14,
1280
1203
  background: C.warnBg, border: `1px solid ${C.warnBorder}`, borderRadius: 4, fontSize: 11, maxWidth: 360,
1281
1204
  }, children: [_jsx("b", { children: "currently overridden" }), _jsxs("span", { style: { color: C.dim }, children: [origin === 'env' ? 'an environment variable' : 'a command-line flag', " is overriding the manifest \u2014 the value shown is the one in effect."] })] }))] })) : (_jsx("span", { style: { color: C.faint }, children: "select a setting" })), m.lastSavedTo !== undefined && (_jsx("div", { style: { marginTop: 18, fontFamily: mono, fontSize: 10.5, color: C.dim }, children: m.lastSavedTo === null