@ai-ecoverse/slicc-spectrum 1.68.3 → 1.69.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/dist/slicc-ui.js CHANGED
@@ -9444,6 +9444,7 @@ var SliccPrompt = class extends i2 {
9444
9444
  trigger = null;
9445
9445
  submit = null;
9446
9446
  #result = Promise.withResolvers();
9447
+ #submitted = null;
9447
9448
  constructor() {
9448
9449
  super();
9449
9450
  this.heading = "";
@@ -9495,14 +9496,14 @@ var SliccPrompt = class extends i2 {
9495
9496
  this.#field.focus();
9496
9497
  return;
9497
9498
  }
9498
- this.#result.resolve(value);
9499
+ this.#submitted = value;
9499
9500
  this.#dialog.close();
9500
9501
  }
9501
9502
  #cancel(event2) {
9502
9503
  if (this.pending) event2.preventDefault();
9503
9504
  }
9504
9505
  #closed() {
9505
- this.#result.resolve(null);
9506
+ this.#result.resolve(this.#submitted);
9506
9507
  this.remove();
9507
9508
  if (this.trigger?.isConnected) this.trigger.focus();
9508
9509
  }
@@ -10736,11 +10737,514 @@ var SliccFreezer = class extends ModelElement {
10736
10737
  }
10737
10738
  };
10738
10739
 
10740
+ // node_modules/@adobe/spectrum-wc-icons/dist/ChevronRight.js
10741
+ function e80() {
10742
+ return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M7.75 16.465a.748.748 0 0 1-.54-1.27l4.999-5.197-4.986-5.184a.75.75 0 0 1 .02-1.06.75.75 0 0 1 1.06.021L13.79 9.48c.28.29.28.749 0 1.039l-5.5 5.716a.75.75 0 0 1-.54.23"/></svg>';
10743
+ }
10744
+
10745
+ // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-chevron-right.js
10746
+ var o51 = class extends a10 {
10747
+ static get styles() {
10748
+ return [t40];
10749
+ }
10750
+ render() {
10751
+ return b`
10752
+ <span class="swc-Icon">${o16(e80())}</span>
10753
+ `;
10754
+ }
10755
+ };
10756
+ e25("swc-icon-chevron-right", o51);
10757
+
10758
+ // node_modules/@adobe/spectrum-wc-icons/dist/Copy.js
10759
+ function e81() {
10760
+ return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M11.75 18h-7.5C3.01 18 2 16.99 2 15.75v-7.5C2 7.01 3.01 6 4.25 6a.75.75 0 0 1 0 1.5.75.75 0 0 0-.75.75v7.5c0 .413.337.75.75.75h7.5c.413 0 .75-.337.75-.75a.75.75 0 0 1 1.5 0c0 1.24-1.01 2.25-2.25 2.25m-5-13A.75.75 0 0 1 6 4.25C6 3.01 7.01 2 8.25 2a.75.75 0 0 1 0 1.5.75.75 0 0 0-.75.75.75.75 0 0 1-.75.75M13 3.5h-2A.75.75 0 0 1 11 2h2a.75.75 0 0 1 0 1.5"/><path fill="var(--swc-icon-color, currentColor)" d="M13 14h-2a.75.75 0 0 1 0-1.5h2a.75.75 0 0 1 0 1.5m2.75 0a.75.75 0 0 1 0-1.5c.413 0 .75-.337.75-.75a.75.75 0 0 1 1.5 0c0 1.24-1.01 2.25-2.25 2.25m1.5-9a.75.75 0 0 1-.75-.75.75.75 0 0 0-.75-.75.75.75 0 0 1 0-1.5C16.99 2 18 3.01 18 4.25a.75.75 0 0 1-.75.75m0 4.75A.75.75 0 0 1 16.5 9V7A.75.75 0 0 1 18 7v2a.75.75 0 0 1-.75.75m-10.5 0A.75.75 0 0 1 6 9V7a.75.75 0 0 1 1.5 0v2a.75.75 0 0 1-.75.75M8.25 14C7.01 14 6 12.99 6 11.75a.75.75 0 0 1 1.5 0c0 .413.337.75.75.75a.75.75 0 0 1 0 1.5"/></svg>';
10761
+ }
10762
+
10763
+ // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-copy.js
10764
+ var o52 = class extends a10 {
10765
+ static get styles() {
10766
+ return [t40];
10767
+ }
10768
+ render() {
10769
+ return b`
10770
+ <span class="swc-Icon">${o16(e81())}</span>
10771
+ `;
10772
+ }
10773
+ };
10774
+ e25("swc-icon-copy", o52);
10775
+
10776
+ // src/app/reach.ts
10777
+ var command = "curl -fsSL https://get.sliccy.ai/slicc | sh";
10778
+ var startCommand = "slicc";
10779
+ var nodeCommand = "npx sliccy@next";
10780
+ var reachStyles = i`
10781
+ .command {
10782
+ display: flex;
10783
+ align-items: center;
10784
+ gap: var(--swc-spacing-100);
10785
+ padding: var(--swc-spacing-75) var(--swc-spacing-75) var(--swc-spacing-75) var(--swc-spacing-200);
10786
+ border-radius: var(--swc-corner-radius-medium-default);
10787
+ background: var(--swc-background-layer-1-color);
10788
+ }
10789
+ code {
10790
+ flex: 1;
10791
+ min-width: 0;
10792
+ overflow-wrap: break-word;
10793
+ word-break: normal;
10794
+ font-family: var(--swc-code-font-family-stack);
10795
+ font-size: var(--swc-font-size-75);
10796
+ color: var(--swc-code-color);
10797
+ user-select: all;
10798
+ }
10799
+ .commands {
10800
+ display: grid;
10801
+ gap: var(--swc-spacing-100);
10802
+ }
10803
+ .commands p {
10804
+ margin: 0;
10805
+ font-size: var(--swc-font-size-75);
10806
+ color: var(--swc-neutral-subdued-content-color-default);
10807
+ }
10808
+ `;
10809
+ function block(text2, copied, copy, first2 = false) {
10810
+ const done2 = copied === text2;
10811
+ return b`<div class="command" data-command=${text2}>
10812
+ <code>${breakable(text2)}</code>
10813
+ <swc-action-button size="s" quiet data-action=${first2 ? "copy-command" : A} accessible-label=${done2 ? "Copied" : `Copy ${text2}`} @click=${() => copy(text2)}>
10814
+ <swc-icon-copy slot="icon"></swc-icon-copy>${done2 ? "Copied" : "Copy"}
10815
+ </swc-action-button>
10816
+ </div>`;
10817
+ }
10818
+ function breakable(text2) {
10819
+ return text2.split("/").map(
10820
+ (part2, index, parts2) => b`${part2}${index < parts2.length - 1 ? b`/<wbr />` : A}`
10821
+ );
10822
+ }
10823
+ function reach({ intro, extensionUrl, copied, uncopied, copy }) {
10824
+ return b`<p>${intro}</p>
10825
+ ${extensionUrl ? b`<p><a class="swc-Link" href=${extensionUrl} target="_blank" rel="noopener noreferrer" data-action="install-extension">Install the Chrome extension</a></p>` : A}
10826
+ <p>To run slicc, enter this in a terminal:</p>
10827
+ <div class="commands">
10828
+ ${block(command, copied, copy, true)}
10829
+ ${block(startCommand, copied, copy)}
10830
+ </div>
10831
+ <div class="commands" data-commands="node">
10832
+ <p>With Node:</p>
10833
+ ${block(nodeCommand, copied, copy)}
10834
+ </div>
10835
+ ${uncopied ? b`<div class="error" role="alert" data-error="copy"><swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle><span>Couldn’t copy. Select the command and copy it.</span></div>` : A}`;
10836
+ }
10837
+ async function copyText(text2) {
10838
+ try {
10839
+ await globalThis.navigator.clipboard.writeText(text2);
10840
+ return true;
10841
+ } catch {
10842
+ return false;
10843
+ }
10844
+ }
10845
+
10846
+ // src/app/monitor.ts
10847
+ function sparkline(points, width = 120, height = 28) {
10848
+ if (points.length < 2) return "";
10849
+ const max2 = Math.max(...points);
10850
+ const min2 = Math.min(...points);
10851
+ const span = max2 - min2 || 1;
10852
+ return points.map(
10853
+ (value, i26) => `${(i26 / (points.length - 1) * width).toFixed(1)},${(height - (value - min2) / span * (height - 2) - 1).toFixed(1)}`
10854
+ ).join(" ");
10855
+ }
10856
+ function meterVariant2(ratio) {
10857
+ if (ratio >= 0.9) return "negative";
10858
+ if (ratio >= 0.6) return "notice";
10859
+ return "informative";
10860
+ }
10861
+ var surfaces = {
10862
+ agents: "agents",
10863
+ terminals: "terminal",
10864
+ tabs: "browser",
10865
+ changes: "changes",
10866
+ processes: "terminal"
10867
+ };
10868
+ var rowLights = {
10869
+ active: "info",
10870
+ idle: "neutral",
10871
+ warn: "notice",
10872
+ error: "negative"
10873
+ };
10874
+ var rowSpoken = {
10875
+ active: "Active",
10876
+ idle: "Idle",
10877
+ warn: "Needs attention",
10878
+ error: "Error"
10879
+ };
10880
+ function indent(depth) {
10881
+ return Math.min(Math.max(Math.floor(depth ?? 0), 0), 6);
10882
+ }
10883
+ function attention(section) {
10884
+ const errors = section.rows.filter((row) => row.status === "error").length;
10885
+ if (errors)
10886
+ return { variant: "negative", text: `${errors} ${errors === 1 ? "error" : "errors"}` };
10887
+ const warnings = section.rows.filter((row) => row.status === "warn").length;
10888
+ if (warnings)
10889
+ return {
10890
+ variant: "notice",
10891
+ text: `${warnings} ${warnings === 1 ? "needs" : "need"} attention`
10892
+ };
10893
+ return null;
10894
+ }
10895
+ var SliccMonitor = class extends ModelElement {
10896
+ static properties = {
10897
+ ...ModelElement.properties,
10898
+ expanded: { state: true },
10899
+ copied: { state: true }
10900
+ };
10901
+ constructor() {
10902
+ super();
10903
+ this.expanded = {};
10904
+ this.copied = null;
10905
+ }
10906
+ static styles = [
10907
+ shared,
10908
+ panelCss,
10909
+ i`
10910
+ .bar {
10911
+ padding-block: var(--swc-spacing-50);
10912
+ }
10913
+ .heading {
10914
+ flex: 1;
10915
+ min-width: 0;
10916
+ display: flex;
10917
+ flex-wrap: wrap;
10918
+ align-items: baseline;
10919
+ column-gap: var(--swc-spacing-100);
10920
+ white-space: normal;
10921
+ }
10922
+ .bar swc-action-button {
10923
+ flex: none;
10924
+ }
10925
+ .body {
10926
+ flex: 1;
10927
+ min-height: 0;
10928
+ overflow-y: auto;
10929
+ padding: var(--swc-spacing-100);
10930
+ display: grid;
10931
+ grid-template-columns: minmax(0, 1fr);
10932
+ align-content: start;
10933
+ gap: var(--swc-spacing-200);
10934
+ }
10935
+ .vitals {
10936
+ display: grid;
10937
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--swc-card-default-width-extra-small)), 1fr));
10938
+ gap: var(--swc-spacing-100);
10939
+ }
10940
+ .vital {
10941
+ display: grid;
10942
+ align-content: start;
10943
+ gap: var(--swc-spacing-50);
10944
+ border-radius: var(--swc-corner-radius-medium-default);
10945
+ padding: var(--swc-spacing-200);
10946
+ background: var(--swc-background-layer-1-color);
10947
+ }
10948
+ .label {
10949
+ color: var(--swc-neutral-subdued-content-color-default);
10950
+ font-size: var(--swc-font-size-75);
10951
+ }
10952
+ .value {
10953
+ font-size: var(--swc-font-size-300);
10954
+ font-weight: var(--swc-bold-font-weight);
10955
+ font-variant-numeric: tabular-nums;
10956
+ }
10957
+ .unit,
10958
+ .delta {
10959
+ color: var(--swc-neutral-subdued-content-color-default);
10960
+ margin-inline-start: var(--swc-spacing-75);
10961
+ }
10962
+ svg {
10963
+ display: block;
10964
+ width: 100%;
10965
+ height: var(--swc-component-height-100);
10966
+ }
10967
+ polyline {
10968
+ fill: none;
10969
+ stroke: var(--swc-accent-visual-color);
10970
+ stroke-width: 1.5;
10971
+ }
10972
+ swc-meter {
10973
+ width: 100%;
10974
+ }
10975
+ .alerts {
10976
+ display: grid;
10977
+ gap: var(--swc-spacing-75);
10978
+ margin: 0;
10979
+ padding: 0;
10980
+ list-style: none;
10981
+ }
10982
+ .alert {
10983
+ display: grid;
10984
+ grid-template-columns: auto minmax(0, 1fr);
10985
+ gap: var(--swc-spacing-100);
10986
+ align-items: start;
10987
+ border-radius: var(--swc-corner-radius-medium-default);
10988
+ padding: var(--swc-spacing-100) var(--swc-spacing-200);
10989
+ background: var(--swc-notice-subtle-background-color-default);
10990
+ }
10991
+ .alert[data-severity='error'] {
10992
+ background: var(--swc-negative-subtle-background-color-default);
10993
+ }
10994
+ .alert swc-icon-alert-triangle {
10995
+ color: var(--swc-icon-color-notice);
10996
+ }
10997
+ .alert swc-icon-alert-diamond {
10998
+ color: var(--swc-icon-color-negative);
10999
+ }
11000
+ .alert .detail {
11001
+ display: block;
11002
+ color: var(--swc-neutral-subdued-content-color-default);
11003
+ }
11004
+ .alert > div {
11005
+ min-width: 0;
11006
+ }
11007
+ .alert .command {
11008
+ display: flex;
11009
+ align-items: center;
11010
+ gap: var(--swc-spacing-100);
11011
+ margin-block-start: var(--swc-spacing-75);
11012
+ padding-inline-start: var(--swc-spacing-100);
11013
+ border-radius: var(--swc-corner-radius-medium-default);
11014
+ background: var(--swc-background-layer-1-color);
11015
+ }
11016
+ .alert code {
11017
+ flex: 1;
11018
+ min-width: 0;
11019
+ overflow-x: auto;
11020
+ white-space: nowrap;
11021
+ font-family: var(--swc-code-font-family-stack);
11022
+ font-size: var(--swc-font-size-75);
11023
+ color: var(--swc-code-color);
11024
+ }
11025
+ .alert .lead {
11026
+ display: block;
11027
+ margin-block-start: var(--swc-spacing-75);
11028
+ color: var(--swc-neutral-subdued-content-color-default);
11029
+ }
11030
+ .alert .uncopied {
11031
+ display: block;
11032
+ color: var(--swc-negative-content-color-default);
11033
+ }
11034
+ .sections {
11035
+ display: grid;
11036
+ margin: 0;
11037
+ padding: 0;
11038
+ list-style: none;
11039
+ }
11040
+ .section {
11041
+ display: grid;
11042
+ }
11043
+ .line {
11044
+ display: flex;
11045
+ flex-wrap: wrap;
11046
+ align-items: center;
11047
+ gap: var(--swc-spacing-100);
11048
+ min-height: var(--swc-component-height-100);
11049
+ padding: var(--swc-spacing-50) 0;
11050
+ }
11051
+ .toggle {
11052
+ all: unset;
11053
+ box-sizing: border-box;
11054
+ flex: 1 1 auto;
11055
+ min-width: 0;
11056
+ display: flex;
11057
+ align-items: center;
11058
+ gap: var(--swc-spacing-75);
11059
+ cursor: pointer;
11060
+ border-radius: var(--swc-corner-radius-small-default);
11061
+ }
11062
+ .toggle:focus-visible {
11063
+ outline: var(--swc-focus-indicator-thickness) solid var(--swc-focus-indicator-color);
11064
+ outline-offset: var(--swc-focus-ring-gap);
11065
+ }
11066
+ .chevron {
11067
+ flex: none;
11068
+ width: var(--swc-component-height-50);
11069
+ display: inline-flex;
11070
+ justify-content: center;
11071
+ color: var(--swc-neutral-subdued-content-color-default);
11072
+ }
11073
+ .toggle[aria-expanded='true'] swc-icon-chevron-right {
11074
+ transform: rotate(90deg);
11075
+ }
11076
+ :host(:dir(rtl)) .toggle[aria-expanded='false'] swc-icon-chevron-right {
11077
+ transform: scaleX(-1);
11078
+ }
11079
+ .line .name {
11080
+ flex: 1 1 auto;
11081
+ min-width: 0;
11082
+ }
11083
+ .line .num {
11084
+ font-weight: var(--swc-bold-font-weight);
11085
+ font-variant-numeric: tabular-nums;
11086
+ }
11087
+ .rows {
11088
+ display: grid;
11089
+ gap: var(--swc-spacing-50);
11090
+ margin: 0 0 var(--swc-spacing-100);
11091
+ padding: 0;
11092
+ padding-inline-start: calc(var(--swc-component-height-50) + var(--swc-spacing-75));
11093
+ list-style: none;
11094
+ }
11095
+ .row {
11096
+ display: grid;
11097
+ grid-template-columns: minmax(0, 1fr) auto;
11098
+ align-items: center;
11099
+ column-gap: var(--swc-spacing-100);
11100
+ padding-inline-start: calc(var(--depth, 0) * var(--swc-spacing-300));
11101
+ }
11102
+ .row swc-status-light {
11103
+ min-width: 0;
11104
+ overflow-wrap: break-word;
11105
+ }
11106
+ .row .badges {
11107
+ grid-column: 2;
11108
+ grid-row: 1 / span 2;
11109
+ align-self: start;
11110
+ display: flex;
11111
+ flex-wrap: wrap;
11112
+ justify-content: end;
11113
+ gap: var(--swc-spacing-50);
11114
+ }
11115
+ .row swc-status-light {
11116
+ grid-column: 1;
11117
+ grid-row: 1;
11118
+ }
11119
+ .row .meta {
11120
+ grid-column: 1;
11121
+ grid-row: 2;
11122
+ padding-inline-start: var(--swc-spacing-300);
11123
+ color: var(--swc-neutral-subdued-content-color-default);
11124
+ font-size: var(--swc-font-size-75);
11125
+ overflow-wrap: break-word;
11126
+ }
11127
+ `
11128
+ ];
11129
+ subscribe(model) {
11130
+ return [model.monitor.on("snapshot", () => this.requestUpdate())];
11131
+ }
11132
+ focus() {
11133
+ this.focusOn(".bar swc-action-button");
11134
+ }
11135
+ #vital(vital) {
11136
+ if (vital.ratio !== void 0) {
11137
+ return b`<div class="vital" data-id=${vital.id}>
11138
+ <swc-meter
11139
+ size="s"
11140
+ variant=${meterVariant2(vital.ratio)}
11141
+ value=${Math.round(vital.ratio * 100)}
11142
+ value-label=${vital.value}
11143
+ ><span slot="label">${vital.label}</span>${vital.unit ? b`<span slot="description">${vital.unit}</span>` : A}</swc-meter
11144
+ >
11145
+ </div>`;
11146
+ }
11147
+ const line = vital.series ? sparkline(vital.series) : "";
11148
+ return b`<div class="vital" data-id=${vital.id}>
11149
+ <div class="label">${vital.label}</div>
11150
+ <div><span class="value">${vital.value}</span>${vital.unit ? b`<span class="unit">${vital.unit}</span>` : A}${vital.delta ? b`<span class="delta">${vital.delta}</span>` : A}</div>
11151
+ ${line ? b`<svg viewBox="0 0 120 28" preserveAspectRatio="none" aria-hidden="true">${w`<polyline points=${line}></polyline>`}</svg>` : A}
11152
+ </div>`;
11153
+ }
11154
+ #alert(alert) {
11155
+ const error = alert.severity === "error";
11156
+ return b`<li class="alert" data-severity=${alert.severity}>
11157
+ ${error ? b`<swc-icon-alert-diamond size="s" aria-hidden="true"></swc-icon-alert-diamond>` : b`<swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle>`}
11158
+ <div><span class="sr">${error ? "Error: " : "Warning: "}</span><strong>${alert.title}</strong><span class="detail">${alert.detail}</span>${alert.command ? this.#command(alert.id, alert.command, alert.commandLabel ?? "Run") : A}</div>
11159
+ </li>`;
11160
+ }
11161
+ #command(id, text2, label) {
11162
+ const copied = this.copied?.id === id && this.copied.text === text2 ? this.copied : null;
11163
+ return b`<span class="lead">${label}:</span><div class="command" data-command><code>${text2}</code><swc-action-button size="s" quiet data-action="copy-command" accessible-label=${copied?.done ? "Copied" : "Copy command"} @click=${() => this.#copy(id, text2)}><swc-icon-copy slot="icon"></swc-icon-copy>${copied?.done ? "Copied" : "Copy"}</swc-action-button></div>${copied && !copied.done ? b`<span class="uncopied" role="alert" data-error="copy">Couldn’t copy. Select the command and copy it.</span>` : A}`;
11164
+ }
11165
+ async #copy(id, text2) {
11166
+ this.copied = { id, text: text2, done: await copyText(text2) };
11167
+ }
11168
+ #open(id) {
11169
+ this.dispatchEvent(
11170
+ new CustomEvent("show-surface", { detail: { id }, bubbles: true, composed: true })
11171
+ );
11172
+ }
11173
+ #row(row) {
11174
+ const depth = indent(row.depth);
11175
+ return b`<li class="row" data-id=${row.id ?? A} data-status=${row.status} data-depth=${depth || A} style=${depth ? `--depth: ${depth}` : A}>
11176
+ <swc-status-light size="s" variant=${rowLights[row.status]}><span class="sr">${rowSpoken[row.status]}: </span>${row.name.split(/(?<=\/)/).map((part2, i26) => i26 ? b`<wbr>${part2}` : part2)}</swc-status-light>
11177
+ <span class="badges">${(row.badges ?? []).map((badge) => b`<swc-badge size="s" variant="neutral" subtle>${badge}</swc-badge>`)}</span>
11178
+ ${row.meta ? b`<span class="meta">${row.meta}</span>` : A}
11179
+ </li>`;
11180
+ }
11181
+ #section(section) {
11182
+ const flag = attention(section);
11183
+ const surface2 = surfaces[section.id];
11184
+ const rows = section.rows.length > 0;
11185
+ const open = rows && (this.expanded[section.id] ?? flag !== null);
11186
+ const list5 = `rows-${section.id}`;
11187
+ return b`<li class="section" data-id=${section.id} data-open=${open ? "" : A}>
11188
+ <div class="line">
11189
+ ${rows ? b`<button class="toggle" aria-expanded=${open ? "true" : "false"} aria-controls=${open ? list5 : A} @click=${() => {
11190
+ this.expanded = { ...this.expanded, [section.id]: !open };
11191
+ }}><span class="chevron"><swc-icon-chevron-right size="s" aria-hidden="true"></swc-icon-chevron-right></span><span class="name">${section.label}</span></button>` : b`<span class="chevron"></span><span class="name">${section.label}</span>`}
11192
+ ${flag ? b`<swc-badge size="s" variant=${flag.variant} subtle>${flag.text}</swc-badge>` : A}
11193
+ <span class="num">${section.rows.length}</span>
11194
+ ${surface2 ? b`<swc-action-button size="s" quiet accessible-label=${`Open ${section.label}`} @click=${() => this.#open(surface2)}
11195
+ >Open</swc-action-button
11196
+ >` : A}
11197
+ </div>
11198
+ ${open ? b`<ul class="rows" id=${list5} aria-label=${section.label}>${c(
11199
+ section.rows,
11200
+ (row, i26) => row.id ?? i26,
11201
+ (row) => this.#row(row)
11202
+ )}</ul>` : A}
11203
+ </li>`;
11204
+ }
11205
+ render() {
11206
+ const snapshot2 = this.model?.monitor.snapshot();
11207
+ return b`<div class="bar">
11208
+ <span class="heading"><strong>Live monitor</strong><span>${snapshot2 ? `Updated ${new Date(snapshot2.updatedAt).toISOString().slice(11, 19)} UTC` : "No data"}</span></span>
11209
+ <swc-action-button size="s" quiet @click=${() => this.model?.monitor.resync()}><swc-icon-refresh slot="icon"></swc-icon-refresh>Re-sync</swc-action-button>
11210
+ </div>
11211
+ <div class="body">
11212
+ ${snapshot2 ? b`<div class="vitals">${snapshot2.vitals.map((vital) => this.#vital(vital))}</div>
11213
+ ${snapshot2.alerts.length ? b`<ul class="alerts" aria-label="Alerts">${snapshot2.alerts.map((alert) => this.#alert(alert))}</ul>` : A}
11214
+ <ul class="sections" aria-label="Activity">${snapshot2.sections.map((section) => this.#section(section))}</ul>` : A}
11215
+ </div>`;
11216
+ }
11217
+ };
11218
+
10739
11219
  // src/app/agents.ts
10740
11220
  function ordered(agents) {
10741
11221
  const cones = agents.filter((agent) => agent.kind === "cone");
10742
11222
  return cones.flatMap((cone) => [cone, ...agents.filter((agent) => agent.parentId === cone.id)]);
10743
11223
  }
11224
+ function creatable(model) {
11225
+ return Boolean(model?.agent.createCone) && !watchOnly(model);
11226
+ }
11227
+ async function createCone(model, trigger2) {
11228
+ const port = model.agent;
11229
+ const create3 = port.createCone?.bind(port);
11230
+ if (!create3) return void 0;
11231
+ let created;
11232
+ await prompt({
11233
+ title: "New cone",
11234
+ label: "Name",
11235
+ action: "Create",
11236
+ trigger: trigger2,
11237
+ submit: async (name) => {
11238
+ if (watchOnly(model)) return;
11239
+ created = await create3(name);
11240
+ }
11241
+ });
11242
+ if (created) port.select(created.id);
11243
+ return created;
11244
+ }
11245
+ function fillShown(fill2) {
11246
+ return fill2 >= 0.5;
11247
+ }
10744
11248
  var SliccAgents = class extends ModelElement {
10745
11249
  static properties = { ...ModelElement.properties, errors: { state: true } };
10746
11250
  constructor() {
@@ -10758,6 +11262,10 @@ var SliccAgents = class extends ModelElement {
10758
11262
  color: var(--swc-neutral-content-color-default);
10759
11263
  font-size: var(--swc-font-size-100);
10760
11264
  }
11265
+ .actions {
11266
+ display: flex;
11267
+ padding: var(--swc-spacing-75) var(--swc-spacing-100) 0;
11268
+ }
10761
11269
  ul {
10762
11270
  list-style: none;
10763
11271
  margin: 0;
@@ -10773,6 +11281,7 @@ var SliccAgents = class extends ModelElement {
10773
11281
  cursor: pointer;
10774
11282
  }
10775
11283
  li.scoop {
11284
+ grid-template-areas: 'name unread fill drop' 'status unread fill drop' 'error error error error';
10776
11285
  padding-inline-start: calc(var(--swc-spacing-200) + var(--swc-spacing-300));
10777
11286
  }
10778
11287
  li:hover {
@@ -10820,12 +11329,21 @@ var SliccAgents = class extends ModelElement {
10820
11329
  min-width: 4ch;
10821
11330
  text-align: end;
10822
11331
  }
11332
+ .fill[data-variant='notice'] {
11333
+ color: var(--swc-notice-color-1000);
11334
+ font-weight: var(--swc-bold-font-weight);
11335
+ }
11336
+ .fill[data-variant='negative'] {
11337
+ color: var(--swc-negative-color-1000);
11338
+ font-weight: var(--swc-bold-font-weight);
11339
+ }
10823
11340
  swc-status-light {
10824
11341
  grid-area: status;
10825
11342
  justify-self: start;
10826
11343
  }
10827
11344
  .drop {
10828
11345
  grid-area: drop;
11346
+ margin-block: calc(-1 * var(--swc-spacing-100));
10829
11347
  visibility: hidden;
10830
11348
  }
10831
11349
  li:hover .drop,
@@ -10977,7 +11495,8 @@ var SliccAgents = class extends ModelElement {
10977
11495
  const error = this.errors[agent.id];
10978
11496
  const model = this.model;
10979
11497
  const title = agent.kind === "cone" ? agentTitle(model, agent) : null;
10980
- const label = `${coneLabel(model, agent)}: ${statusLabel[agent.status]}, ${percent(agent.contextFill)} context${agent.unread ? `, ${agent.unread} unread` : ""}${error ? `. ${error}` : ""}`;
11498
+ const unread = selected ? 0 : agent.unread;
11499
+ const label = `${coneLabel(model, agent)}: ${statusLabel[agent.status]}, ${percent(agent.contextFill)} context${unread ? `, ${unread} unread` : ""}${error ? `. ${error}` : ""}`;
10981
11500
  return b`<li
10982
11501
  role="option"
10983
11502
  class=${agent.kind}
@@ -10991,19 +11510,32 @@ var SliccAgents = class extends ModelElement {
10991
11510
  >
10992
11511
  <span class="name">${agent.name}</span>
10993
11512
  ${title === null ? A : b`<span class="title">${title || untitled}</span>`}
10994
- ${agent.unread ? b`<swc-badge class="unread" size="s" variant="accent">${agent.unread}</swc-badge>` : A}
10995
- <span class="fill">${percent(agent.contextFill)}</span>
11513
+ ${unread ? b`<swc-badge class="unread" size="s" variant="accent">${unread}</swc-badge>` : A}
11514
+ ${fillShown(agent.contextFill) ? b`<span class="fill" data-variant=${meterVariant2(agent.contextFill)}>${percent(agent.contextFill)}</span>` : A}
10996
11515
  ${statusLight(agent.status)}
10997
11516
  ${this.#dropButton(agent)}
10998
11517
  ${this.#deleteButton(agent)}
10999
11518
  ${error ? b`<span class="error">${error}</span>` : A}
11000
11519
  </li>`;
11001
11520
  }
11521
+ async #newCone(trigger2) {
11522
+ if (!await createCone(this.model, trigger2)) return;
11523
+ await this.updateComplete;
11524
+ this.focus();
11525
+ }
11526
+ #actions() {
11527
+ if (!creatable(this.model)) return A;
11528
+ return b`<div class="actions">
11529
+ <swc-action-button size="s" quiet data-action="new-cone" @click=${(event2) => void this.#newCone(event2.currentTarget)}>
11530
+ <swc-icon-add slot="icon"></swc-icon-add>New cone
11531
+ </swc-action-button>
11532
+ </div>`;
11533
+ }
11002
11534
  render() {
11003
11535
  const agents = ordered(this.model?.agent.list() ?? []);
11004
11536
  const active = this.model?.agent.active() ?? "";
11005
11537
  const errors = Object.values(this.errors);
11006
- return b`<ul role="listbox" aria-label="Cones and scoops" @keydown=${this.#keydown}>
11538
+ return b`${this.#actions()}<ul role="listbox" aria-label="Cones and scoops" @keydown=${this.#keydown}>
11007
11539
  ${agents.map((agent) => this.#row(agent, active))}
11008
11540
  </ul>
11009
11541
  <div class="sr" role="status">${errors.at(-1) ?? ""}</div>`;
@@ -11025,7 +11557,7 @@ var i17 = e2(class extends i3 {
11025
11557
 
11026
11558
  // node_modules/lit-html/static.js
11027
11559
  var a12 = /* @__PURE__ */ Symbol.for("");
11028
- var o51 = (t90) => {
11560
+ var o53 = (t90) => {
11029
11561
  if (t90?.r === a12) return t90?._$litStatic$;
11030
11562
  };
11031
11563
  var s9 = (t90) => ({ _$litStatic$: t90, r: a12 });
@@ -11036,7 +11568,7 @@ var n28 = (t90) => (r40, ...e120) => {
11036
11568
  const n37 = [], u27 = [];
11037
11569
  let c28, $6 = 0, f11 = false;
11038
11570
  for (; $6 < a23; ) {
11039
- for (c28 = r40[$6]; $6 < a23 && void 0 !== (i26 = e120[$6], s19 = o51(i26)); ) c28 += s19 + r40[++$6], f11 = true;
11571
+ for (c28 = r40[$6]; $6 < a23 && void 0 !== (i26 = e120[$6], s19 = o53(i26)); ) c28 += s19 + r40[++$6], f11 = true;
11040
11572
  $6 !== a23 && u27.push(i26), n37.push(c28), $6++;
11041
11573
  }
11042
11574
  if ($6 === a23 && n37.push(r40[a23]), f11) {
@@ -11170,150 +11702,132 @@ async function grammar(kind, name, version2, remote = grammarCdn, importer = (ur
11170
11702
  }
11171
11703
 
11172
11704
  // node_modules/@adobe/spectrum-wc-icons/dist/Cloud.js
11173
- function e80() {
11705
+ function e82() {
11174
11706
  return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M15.407 17H3.717a3.456 3.456 0 0 1-3.45-3.452 3.45 3.45 0 0 1 2.323-3.25 4 4 0 0 1-.065-.702c0-2.18 1.81-3.953 4.034-3.953q.42 0 .831.087c.637-1.958 2.476-3.346 4.589-3.346a4.85 4.85 0 0 1 4.844 4.844q0 .659-.187 1.298a4.32 4.32 0 0 1 3.103 4.142A4.337 4.337 0 0 1 15.407 17M6.559 7.143c-1.397 0-2.534 1.1-2.534 2.453q.001.5.206.965a.75.75 0 0 1-.637 1.051 1.95 1.95 0 0 0-1.828 1.936c0 1.076.876 1.952 1.952 1.952h11.689a2.835 2.835 0 0 0 2.832-2.832 2.826 2.826 0 0 0-2.682-2.814.75.75 0 0 1-.625-1.095c.26-.5.39-1.015.39-1.531 0-1.844-1.5-3.344-3.344-3.344-1.662 0-3.08 1.252-3.297 2.912a.75.75 0 0 1-1.054.585 2.6 2.6 0 0 0-1.068-.238"/></svg>';
11175
11707
  }
11176
11708
 
11177
11709
  // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-cloud.js
11178
- var o52 = class extends a10 {
11710
+ var o54 = class extends a10 {
11179
11711
  static get styles() {
11180
11712
  return [t40];
11181
11713
  }
11182
11714
  render() {
11183
11715
  return b`
11184
- <span class="swc-Icon">${o16(e80())}</span>
11716
+ <span class="swc-Icon">${o16(e82())}</span>
11185
11717
  `;
11186
11718
  }
11187
11719
  };
11188
- e25("swc-icon-cloud", o52);
11720
+ e25("swc-icon-cloud", o54);
11189
11721
 
11190
11722
  // node_modules/@adobe/spectrum-wc-icons/dist/CloudStateError.js
11191
- function e81() {
11723
+ function e83() {
11192
11724
  return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M15.5 9.021a4.5 4.5 0 1 0 0 9c2.485 0 4.48-2.015 4.48-4.5s-1.995-4.5-4.48-4.5m.95 6.895c0 .472-.425.855-.95.855s-.95-.383-.95-.855v-.289c0-.472.425-.856.95-.856s.95.384.95.856zm-.075-2.495c0 .414-.392.75-.875.75s-.875-.336-.875-.75v-2.65c0-.414.392-.75.875-.75s.875.336.875.75z"/><path fill="var(--swc-icon-color, currentColor)" d="M9.25 16.998H3.718a3.455 3.455 0 0 1-3.452-3.451 3.45 3.45 0 0 1 2.324-3.25 4 4 0 0 1-.065-.703c0-2.18 1.81-3.952 4.034-3.952q.42 0 .83.087c.638-1.958 2.477-3.347 4.59-3.347a4.826 4.826 0 0 1 4.818 4.35.75.75 0 1 1-1.492.15 3.33 3.33 0 0 0-3.326-3c-1.664 0-3.08 1.252-3.297 2.912a.752.752 0 0 1-1.054.586 2.6 2.6 0 0 0-1.07-.238c-1.396 0-2.533 1.1-2.533 2.452q.001.5.206.965a.75.75 0 0 1-.637 1.051 1.95 1.95 0 0 0-1.828 1.937c0 1.076.876 1.951 1.952 1.951H9.25a.75.75 0 0 1 0 1.5"/></svg>';
11193
11725
  }
11194
11726
 
11195
11727
  // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-cloud-state-error.js
11196
- var o53 = class extends a10 {
11728
+ var o55 = class extends a10 {
11197
11729
  static get styles() {
11198
11730
  return [t40];
11199
11731
  }
11200
11732
  render() {
11201
11733
  return b`
11202
- <span class="swc-Icon">${o16(e81())}</span>
11734
+ <span class="swc-Icon">${o16(e83())}</span>
11203
11735
  `;
11204
11736
  }
11205
11737
  };
11206
- e25("swc-icon-cloud-state-error", o53);
11738
+ e25("swc-icon-cloud-state-error", o55);
11207
11739
 
11208
11740
  // node_modules/@adobe/spectrum-wc-icons/dist/CloudStateOnline.js
11209
- function e82() {
11741
+ function e84() {
11210
11742
  return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M9.25 17.002H3.718A3.455 3.455 0 0 1 .266 13.55 3.45 3.45 0 0 1 2.59 10.3a4 4 0 0 1-.065-.703c0-2.18 1.81-3.952 4.034-3.952q.42 0 .83.087c.638-1.959 2.477-3.347 4.59-3.347a4.85 4.85 0 0 1 4.843 4.844q0 .464-.093.92a.745.745 0 0 1-.885.583.75.75 0 0 1-.584-.884q.061-.307.062-.619c0-1.844-1.5-3.344-3.343-3.344-1.664 0-3.08 1.252-3.297 2.912a.752.752 0 0 1-1.054.586 2.6 2.6 0 0 0-1.07-.238c-1.396 0-2.533 1.1-2.533 2.452q.001.5.206.965a.75.75 0 0 1-.637 1.051 1.95 1.95 0 0 0-1.828 1.937c0 1.076.876 1.951 1.952 1.951H9.25a.75.75 0 0 1 0 1.5"/><path fill="var(--swc-icon-color, currentColor)" d="M18.503 13.434a.75.75 0 0 1-.53-.22 4.88 4.88 0 0 0-3.472-1.442h-.006a4.87 4.87 0 0 0-3.462 1.433.75.75 0 1 1-1.06-1.06 6.35 6.35 0 0 1 4.522-1.873h.007c1.712.002 3.32.67 4.531 1.881a.75.75 0 0 1-.53 1.28"/><path fill="var(--swc-icon-color, currentColor)" d="M16.384 15.544a.75.75 0 0 1-.53-.22 1.916 1.916 0 0 0-2.706-.004.75.75 0 1 1-1.06-1.06 3.4 3.4 0 0 1 2.41-.998h.003a3.4 3.4 0 0 1 2.413 1.002.75.75 0 0 1-.53 1.28"/><path fill="var(--swc-icon-color, currentColor)" d="M15.136 17.64a.897.897 0 0 1-1.27.001.9.9 0 1 1 1.27-.001" data-name="Path 1027855"/></svg>';
11211
11743
  }
11212
11744
 
11213
11745
  // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-cloud-state-online.js
11214
- var o54 = class extends a10 {
11746
+ var o56 = class extends a10 {
11215
11747
  static get styles() {
11216
11748
  return [t40];
11217
11749
  }
11218
11750
  render() {
11219
11751
  return b`
11220
- <span class="swc-Icon">${o16(e82())}</span>
11752
+ <span class="swc-Icon">${o16(e84())}</span>
11221
11753
  `;
11222
11754
  }
11223
11755
  };
11224
- e25("swc-icon-cloud-state-online", o54);
11756
+ e25("swc-icon-cloud-state-online", o56);
11225
11757
 
11226
11758
  // node_modules/@adobe/spectrum-wc-icons/dist/CloudStateSlowConnection.js
11227
- function e83() {
11759
+ function e85() {
11228
11760
  return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M8.946 16.998H3.718a3.455 3.455 0 0 1-3.452-3.451 3.45 3.45 0 0 1 2.324-3.25 4 4 0 0 1-.065-.703c0-2.18 1.81-3.952 4.034-3.952q.42 0 .83.087c.638-1.958 2.477-3.347 4.59-3.347a4.826 4.826 0 0 1 4.818 4.35.75.75 0 1 1-1.492.15 3.33 3.33 0 0 0-3.326-3c-1.664 0-3.08 1.252-3.297 2.912a.752.752 0 0 1-1.054.586 2.6 2.6 0 0 0-1.07-.238c-1.396 0-2.533 1.1-2.533 2.452q.001.5.206.965a.75.75 0 0 1-.637 1.051 1.95 1.95 0 0 0-1.828 1.937c0 1.076.876 1.951 1.952 1.951h5.228a.75.75 0 0 1 0 1.5M19 16.271v-7a.75.75 0 0 0-1.5 0v7a.75.75 0 0 0 1.5 0m-3 0v-5a.75.75 0 0 0-1.5 0v5a.75.75 0 0 0 1.5 0"/><path fill="var(--swc-icon-color, currentColor)" d="M13 16.271v-3a.75.75 0 0 0-1.5 0v3a.75.75 0 0 0 1.5 0"/></svg>';
11229
11761
  }
11230
11762
 
11231
11763
  // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-cloud-state-slow-connection.js
11232
- var o55 = class extends a10 {
11764
+ var o57 = class extends a10 {
11233
11765
  static get styles() {
11234
11766
  return [t40];
11235
11767
  }
11236
11768
  render() {
11237
11769
  return b`
11238
11770
  <span class="swc-Icon">
11239
- ${o16(e83())}
11771
+ ${o16(e85())}
11240
11772
  </span>
11241
11773
  `;
11242
11774
  }
11243
11775
  };
11244
- e25("swc-icon-cloud-state-slow-connection", o55);
11245
-
11246
- // node_modules/@adobe/spectrum-wc-icons/dist/Copy.js
11247
- function e84() {
11248
- return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M11.75 18h-7.5C3.01 18 2 16.99 2 15.75v-7.5C2 7.01 3.01 6 4.25 6a.75.75 0 0 1 0 1.5.75.75 0 0 0-.75.75v7.5c0 .413.337.75.75.75h7.5c.413 0 .75-.337.75-.75a.75.75 0 0 1 1.5 0c0 1.24-1.01 2.25-2.25 2.25m-5-13A.75.75 0 0 1 6 4.25C6 3.01 7.01 2 8.25 2a.75.75 0 0 1 0 1.5.75.75 0 0 0-.75.75.75.75 0 0 1-.75.75M13 3.5h-2A.75.75 0 0 1 11 2h2a.75.75 0 0 1 0 1.5"/><path fill="var(--swc-icon-color, currentColor)" d="M13 14h-2a.75.75 0 0 1 0-1.5h2a.75.75 0 0 1 0 1.5m2.75 0a.75.75 0 0 1 0-1.5c.413 0 .75-.337.75-.75a.75.75 0 0 1 1.5 0c0 1.24-1.01 2.25-2.25 2.25m1.5-9a.75.75 0 0 1-.75-.75.75.75 0 0 0-.75-.75.75.75 0 0 1 0-1.5C16.99 2 18 3.01 18 4.25a.75.75 0 0 1-.75.75m0 4.75A.75.75 0 0 1 16.5 9V7A.75.75 0 0 1 18 7v2a.75.75 0 0 1-.75.75m-10.5 0A.75.75 0 0 1 6 9V7a.75.75 0 0 1 1.5 0v2a.75.75 0 0 1-.75.75M8.25 14C7.01 14 6 12.99 6 11.75a.75.75 0 0 1 1.5 0c0 .413.337.75.75.75a.75.75 0 0 1 0 1.5"/></svg>';
11249
- }
11250
-
11251
- // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-copy.js
11252
- var o56 = class extends a10 {
11253
- static get styles() {
11254
- return [t40];
11255
- }
11256
- render() {
11257
- return b`
11258
- <span class="swc-Icon">${o16(e84())}</span>
11259
- `;
11260
- }
11261
- };
11262
- e25("swc-icon-copy", o56);
11776
+ e25("swc-icon-cloud-state-slow-connection", o57);
11263
11777
 
11264
11778
  // node_modules/@adobe/spectrum-wc-icons/dist/InfoCircle.js
11265
- function e85() {
11779
+ function e86() {
11266
11780
  return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M10 18.75c-4.825 0-8.75-3.925-8.75-8.75S5.175 1.25 10 1.25s8.75 3.925 8.75 8.75-3.925 8.75-8.75 8.75m0-16c-3.998 0-7.25 3.252-7.25 7.25s3.252 7.25 7.25 7.25 7.25-3.252 7.25-7.25S13.998 2.75 10 2.75"/><path fill="var(--swc-icon-color, currentColor)" d="M10 5.26a.9.9 0 0 1 .627.229c.33.365.33.921 0 1.286a.87.87 0 0 1-.626.235.85.85 0 0 1-.633-.248.86.86 0 0 1-.242-.627.88.88 0 0 1 .228-.64A.86.86 0 0 1 10 5.26m0 9.803a.75.75 0 0 1-.75-.75V9.478a.75.75 0 0 1 1.5 0v4.835a.75.75 0 0 1-.75.75"/></svg>';
11267
11781
  }
11268
11782
 
11269
11783
  // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-info-circle.js
11270
- var o57 = class extends a10 {
11784
+ var o58 = class extends a10 {
11271
11785
  static get styles() {
11272
11786
  return [t40];
11273
11787
  }
11274
11788
  render() {
11275
11789
  return b`
11276
- <span class="swc-Icon">${o16(e85())}</span>
11790
+ <span class="swc-Icon">${o16(e86())}</span>
11277
11791
  `;
11278
11792
  }
11279
11793
  };
11280
- e25("swc-icon-info-circle", o57);
11794
+ e25("swc-icon-info-circle", o58);
11281
11795
 
11282
11796
  // node_modules/@adobe/spectrum-wc-icons/dist/Visibility.js
11283
- function e86() {
11797
+ function e87() {
11284
11798
  return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M10.034 16.662C5.143 16.662.75 12.273.75 10.2c0-1.685 2.598-4.55 5.347-5.898A8.95 8.95 0 0 1 9.99 3.35c5.158 0 9.26 4.919 9.26 6.85 0 2.072-4.36 6.46-9.216 6.46M10 4.85a7.44 7.44 0 0 0-3.24.797C4.155 6.923 2.25 9.397 2.25 10.2c0 1.144 3.68 4.96 7.784 4.96 4.069 0 7.716-3.816 7.716-4.96 0-1.05-3.481-5.35-7.75-5.35m-3.569.124h.01z"/><path fill="var(--swc-icon-color, currentColor)" d="M9.83 7.644c.222-.637-.474-1.26-1.1-1.01a3.5 3.5 0 0 0-1.283.88 3.565 3.565 0 0 0 4.697 5.315 3.54 3.54 0 0 0 1.317-1.833c.209-.684-.458-1.25-1.119-.976A1.904 1.904 0 0 1 9.85 8.943a1.88 1.88 0 0 1-.02-1.3"/></svg>';
11285
11799
  }
11286
11800
 
11287
11801
  // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-visibility.js
11288
- var o58 = class extends a10 {
11802
+ var o59 = class extends a10 {
11289
11803
  static get styles() {
11290
11804
  return [t40];
11291
11805
  }
11292
11806
  render() {
11293
11807
  return b`
11294
- <span class="swc-Icon">${o16(e86())}</span>
11808
+ <span class="swc-Icon">${o16(e87())}</span>
11295
11809
  `;
11296
11810
  }
11297
11811
  };
11298
- e25("swc-icon-visibility", o58);
11812
+ e25("swc-icon-visibility", o59);
11299
11813
 
11300
11814
  // node_modules/@adobe/spectrum-wc-icons/dist/VisibilityOff.js
11301
- function e87() {
11815
+ function e88() {
11302
11816
  return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M9.966 16.683C5.11 16.683.75 12.294.75 10.222c0-.92.864-2.36 2.201-3.668A.75.75 0 1 1 4 7.626c-1.31 1.281-1.75 2.32-1.75 2.596 0 1.144 3.647 4.96 7.716 4.96a7.3 7.3 0 0 0 1.863-.251.756.756 0 0 1 .917.534c.106.4-.134.81-.534.917-.756.2-1.512.3-2.246.3m6.638-2.839a.75.75 0 0 1-.506-1.304c1.14-1.042 1.652-1.982 1.652-2.317 0-.802-1.904-3.277-4.51-4.552a7.4 7.4 0 0 0-3.25-.798 7 7 0 0 0-1.905.28.75.75 0 1 1-.416-1.441A8.4 8.4 0 0 1 10 3.371a8.95 8.95 0 0 1 3.907.954c2.742 1.343 5.343 4.21 5.343 5.896 0 .919-.8 2.199-2.14 3.424a.75.75 0 0 1-.506.197"/><path fill="var(--swc-icon-color, currentColor)" d="m18.78 17.741-5.778-5.778c.204-.296.358-.615.46-.946.208-.684-.46-1.25-1.12-.976-.495.206-.946.14-1.18.081L9.788 8.75a1.9 1.9 0 0 1 .04-1.085c.223-.637-.473-1.26-1.1-1.01a3.5 3.5 0 0 0-.677.358L2.28 1.241a.75.75 0 1 0-1.06 1.06l16.5 16.5a.747.747 0 0 0 1.06 0 .75.75 0 0 0 0-1.06M8.205 12.998a3.53 3.53 0 0 0 2.319.484L6.542 9.501a3.56 3.56 0 0 0 1.663 3.497"/></svg>';
11303
11817
  }
11304
11818
 
11305
11819
  // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-visibility-off.js
11306
- var o59 = class extends a10 {
11820
+ var o60 = class extends a10 {
11307
11821
  static get styles() {
11308
11822
  return [t40];
11309
11823
  }
11310
11824
  render() {
11311
11825
  return b`
11312
- <span class="swc-Icon">${o16(e87())}</span>
11826
+ <span class="swc-Icon">${o16(e88())}</span>
11313
11827
  `;
11314
11828
  }
11315
11829
  };
11316
- e25("swc-icon-visibility-off", o59);
11830
+ e25("swc-icon-visibility-off", o60);
11317
11831
 
11318
11832
  // node_modules/@adobe/spectrum-wc/dist/link.css
11319
11833
  var link_default = '/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n/**\n * Standalone link presentation for native `<a href>` elements.\n *\n * Default anchor appearance inside `.swc-Typography--prose` and\n * `.swc-Typography--links` ships with `typography.css` (generated). Import this\n * stylesheet when authors need explicit BEM modifiers on anchors.\n *\n */\n\n.swc-Link {\n inline-size: -moz-fit-content;\n inline-size: fit-content;\n font-family: var(--swc-sans-font-family-stack);\n font-size: var(--swc-font-size-100);\n font-style: normal;\n font-weight: 400;\n line-height: 1.30;\n color: var(--swc-link-text-color-default, var(--swc-accent-color-900));\n -webkit-text-decoration: underline;\n text-decoration: underline;\n text-decoration-thickness: 1px;\n text-underline-offset: 1px;\n transition: color 130ms ease-in-out;\n\n &:hover {\n color: var(--swc-link-text-color-hover, var(--swc-accent-color-1000));\n }\n\n &:active {\n color: var(--swc-link-text-color-down, var(--swc-accent-color-1000));\n }\n\n &:focus-visible {\n color: var(--swc-link-text-color-focus, var(--swc-accent-color-1000));\n border-radius: 4px;\n outline: 2px solid var(--swc-link-focus-indicator-color, var(--swc-blue-800));\n outline-offset: 2px;\n }\n\n &:lang(ja),\n &:lang(zh),\n &:lang(ko) {\n line-height: 1.50;\n }\n}\n\n.swc-Link--standalone {\n font-weight: 500;\n}\n\n.swc-Link--secondary {\n --swc-link-text-color-default: var(--swc-gray-800);\n --swc-link-text-color-hover: var(--swc-gray-900);\n --swc-link-text-color-down: var(--swc-gray-900);\n --swc-link-text-color-focus: var(--swc-gray-900);\n}\n\n.swc-Link--staticWhite {\n --swc-link-text-color-default: var(--swc-white);\n --swc-link-text-color-hover: var(--swc-white);\n --swc-link-text-color-down: var(--swc-white);\n --swc-link-text-color-focus: var(--swc-white);\n --swc-link-focus-indicator-color: var(--swc-white);\n}\n\n.swc-Link--staticBlack {\n --swc-link-text-color-default: var(--swc-black);\n --swc-link-text-color-hover: var(--swc-black);\n --swc-link-text-color-down: var(--swc-black);\n --swc-link-text-color-focus: var(--swc-black);\n --swc-link-focus-indicator-color: var(--swc-black);\n}\n\n.swc-Link--quiet.swc-Link--standalone {\n -webkit-text-decoration: none;\n text-decoration: none;\n}\n\n.swc-Link--quiet.swc-Link--standalone:hover {\n -webkit-text-decoration: underline;\n text-decoration: underline;\n}\n';
@@ -11986,76 +12500,6 @@ function qrCode(text2, label) {
11986
12500
  return b`<svg class="qr" viewBox="0 0 ${size4} ${size4}" role="img" aria-label=${label} shape-rendering="crispEdges" data-qr><rect width=${size4} height=${size4} fill="#fff"></rect><path d=${path} fill="#000"></path></svg>`;
11987
12501
  }
11988
12502
 
11989
- // src/app/reach.ts
11990
- var command = "curl -fsSL https://get.sliccy.ai/slicc | sh";
11991
- var startCommand = "slicc";
11992
- var nodeCommand = "npx sliccy@next";
11993
- var reachStyles = i`
11994
- .command {
11995
- display: flex;
11996
- align-items: center;
11997
- gap: var(--swc-spacing-100);
11998
- padding: var(--swc-spacing-75) var(--swc-spacing-75) var(--swc-spacing-75) var(--swc-spacing-200);
11999
- border-radius: var(--swc-corner-radius-medium-default);
12000
- background: var(--swc-background-layer-1-color);
12001
- }
12002
- code {
12003
- flex: 1;
12004
- min-width: 0;
12005
- overflow-wrap: break-word;
12006
- word-break: normal;
12007
- font-family: var(--swc-code-font-family-stack);
12008
- font-size: var(--swc-font-size-75);
12009
- color: var(--swc-code-color);
12010
- user-select: all;
12011
- }
12012
- .commands {
12013
- display: grid;
12014
- gap: var(--swc-spacing-100);
12015
- }
12016
- .commands p {
12017
- margin: 0;
12018
- font-size: var(--swc-font-size-75);
12019
- color: var(--swc-neutral-subdued-content-color-default);
12020
- }
12021
- `;
12022
- function block(text2, copied, copy, first2 = false) {
12023
- const done2 = copied === text2;
12024
- return b`<div class="command" data-command=${text2}>
12025
- <code>${breakable(text2)}</code>
12026
- <swc-action-button size="s" quiet data-action=${first2 ? "copy-command" : A} accessible-label=${done2 ? "Copied" : `Copy ${text2}`} @click=${() => copy(text2)}>
12027
- <swc-icon-copy slot="icon"></swc-icon-copy>${done2 ? "Copied" : "Copy"}
12028
- </swc-action-button>
12029
- </div>`;
12030
- }
12031
- function breakable(text2) {
12032
- return text2.split("/").map(
12033
- (part2, index, parts2) => b`${part2}${index < parts2.length - 1 ? b`/<wbr />` : A}`
12034
- );
12035
- }
12036
- function reach({ intro, extensionUrl, copied, uncopied, copy }) {
12037
- return b`<p>${intro}</p>
12038
- ${extensionUrl ? b`<p><a class="swc-Link" href=${extensionUrl} target="_blank" rel="noopener noreferrer" data-action="install-extension">Install the Chrome extension</a></p>` : A}
12039
- <p>To run slicc, enter this in a terminal:</p>
12040
- <div class="commands">
12041
- ${block(command, copied, copy, true)}
12042
- ${block(startCommand, copied, copy)}
12043
- </div>
12044
- <div class="commands" data-commands="node">
12045
- <p>With Node:</p>
12046
- ${block(nodeCommand, copied, copy)}
12047
- </div>
12048
- ${uncopied ? b`<div class="error" role="alert" data-error="copy"><swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle><span>Couldn’t copy. Select the command and copy it.</span></div>` : A}`;
12049
- }
12050
- async function copyText(text2) {
12051
- try {
12052
- await globalThis.navigator.clipboard.writeText(text2);
12053
- return true;
12054
- } catch {
12055
- return false;
12056
- }
12057
- }
12058
-
12059
12503
  // src/app/tray.ts
12060
12504
  var connectionVariant = {
12061
12505
  live: "positive",
@@ -13296,7 +13740,7 @@ var SliccNetwork = class extends ModelElement {
13296
13740
  };
13297
13741
 
13298
13742
  // src/app/panels.ts
13299
- var surfaces = [
13743
+ var surfaces2 = [
13300
13744
  {
13301
13745
  id: "agents",
13302
13746
  title: "Agents",
@@ -13410,7 +13854,7 @@ function screenClass(width) {
13410
13854
  if (width < 1200) return "tablet";
13411
13855
  return "desktop";
13412
13856
  }
13413
- function surface(id, items = surfaces) {
13857
+ function surface(id, items = surfaces2) {
13414
13858
  return items.find((candidate) => candidate.id === id);
13415
13859
  }
13416
13860
  function create(tag3, model, params = {}) {
@@ -13557,7 +14001,7 @@ function openTerminal(dock, info, screen) {
13557
14001
  }
13558
14002
  return id;
13559
14003
  }
13560
- function defaultLayout(dock, screen, agent, items = surfaces, terminals = []) {
14004
+ function defaultLayout(dock, screen, agent, items = surfaces2, terminals = []) {
13561
14005
  dock.clear();
13562
14006
  const order = ["center", "left", "right"];
13563
14007
  for (const side of order) {
@@ -17206,7 +17650,7 @@ ${swc_default}`));
17206
17650
  var t47 = i`:host{display:block}*{box-sizing:border-box}.swc-Divider{--_swc-divider-thickness: var(--swc-divider-thickness, 2px);inline-size:100%;block-size:var(--_swc-divider-thickness);background-color:var(--swc-divider-background-color, var(--swc-gray-200));border-radius:var(--_swc-divider-thickness)}:host([size=\"s\"]){--swc-divider-thickness: 1px}:host([size=\"l\"]){--swc-divider-thickness: 4px;--swc-divider-background-color: var(--swc-gray-800)}.swc-Divider:not(.swc-Divider--vertical){min-inline-size:min(100%,200px)}:host([vertical]){align-self:stretch}.swc-Divider--vertical{inline-size:var(--_swc-divider-thickness);block-size:100%;min-block-size:min(100%,200px)}.swc-Divider--staticWhite{--swc-divider-background-color: rgba(255, 255, 255, .14)}.swc-Divider--staticWhite:where(.swc-Divider--sizeL){--swc-divider-background-color: rgba(255, 255, 255, .85)}.swc-Divider--staticBlack{--swc-divider-background-color: rgba(0, 0, 0, .12)}.swc-Divider--staticBlack:where(.swc-Divider--sizeL){--swc-divider-background-color: rgba(0, 0, 0, .84)}@media(forced-colors:active){.swc-Divider{--swc-divider-background-color: CanvasText}}`;
17207
17651
 
17208
17652
  // node_modules/@adobe/spectrum-wc-core/dist/components/divider/Divider.types.js
17209
- var e88 = [
17653
+ var e89 = [
17210
17654
  "s",
17211
17655
  "m",
17212
17656
  "l"
@@ -17215,7 +17659,7 @@ var t48 = ["white", "black"];
17215
17659
 
17216
17660
  // node_modules/@adobe/spectrum-wc-core/dist/components/divider/Divider.base.js
17217
17661
  var s10;
17218
- var c18 = class extends i12(i9, { validSizes: e88 }) {
17662
+ var c18 = class extends i12(i9, { validSizes: e89 }) {
17219
17663
  constructor(...e120) {
17220
17664
  super(...e120), this.vertical = false;
17221
17665
  }
@@ -17274,7 +17718,7 @@ e25("swc-divider", a13);
17274
17718
  var t49 = i`:host([indeterminate]) .swc-LinearProgress-fill{inline-size:100%;min-inline-size:0;transform-origin:left;transition:none;animation:indeterminate-loop-ltr 1s cubic-bezier(.45,0,.4,1) infinite;will-change:transform;&:dir(rtl){animation-name:indeterminate-loop-rtl}}@keyframes indeterminate-loop-ltr{0%{transform:translate(-70%) scaleX(.7)}to{transform:translate(100%) scaleX(.7)}}@keyframes indeterminate-loop-rtl{0%{transform:translate(100%) scaleX(.7)}to{transform:translate(-70%) scaleX(.7)}}@media(prefers-reduced-motion:reduce){:host([indeterminate]) .swc-LinearProgress-fill{animation-duration:15s;animation-timing-function:linear}}`;
17275
17719
 
17276
17720
  // node_modules/@adobe/spectrum-wc-core/dist/components/progress-bar/ProgressBar.base.js
17277
- var o60 = class extends m3(i12(i9, {
17721
+ var o61 = class extends m3(i12(i9, {
17278
17722
  validSizes: s6,
17279
17723
  defaultSize: "m"
17280
17724
  })) {
@@ -17285,10 +17729,10 @@ var o60 = class extends m3(i12(i9, {
17285
17729
  e24([n({
17286
17730
  type: Boolean,
17287
17731
  reflect: true
17288
- })], o60.prototype, "indeterminate", void 0);
17732
+ })], o61.prototype, "indeterminate", void 0);
17289
17733
 
17290
17734
  // node_modules/@adobe/spectrum-wc/dist/components/progress-bar/ProgressBar.js
17291
- var o61 = class extends o60 {
17735
+ var o62 = class extends o61 {
17292
17736
  static get styles() {
17293
17737
  return [t26, t49];
17294
17738
  }
@@ -17337,7 +17781,7 @@ var o61 = class extends o60 {
17337
17781
  };
17338
17782
 
17339
17783
  // node_modules/@adobe/spectrum-wc/dist/components/progress-bar/swc-progress-bar.js
17340
- e25("swc-progress-bar", o61);
17784
+ e25("swc-progress-bar", o62);
17341
17785
 
17342
17786
  // node_modules/@adobe/spectrum-wc/dist/patterns/ai-toolkit/conversation-turn/conversation-turn.js
17343
17787
  var t50 = i`:host{display:block;inline-size:100%}:host(:focus-visible){outline:none}*,*:before,*:after{box-sizing:border-box}.swc-ConversationTurn{display:flex;inline-size:100%;min-inline-size:0}.swc-ConversationTurn>slot{display:flex;flex-direction:column;gap:8px;inline-size:100%;min-inline-size:0}:host([type=\"user\"]) .swc-ConversationTurn{justify-content:flex-end}:host([type=\"user\"]) .swc-ConversationTurn>slot{align-items:flex-end}:host([type=\"system\"]) .swc-ConversationTurn{justify-content:flex-start}:host([type=\"system\"]) .swc-ConversationTurn>slot{align-items:stretch}:host([type=\"system\"]) ::slotted(*){flex:1 1 100%;min-inline-size:0;max-inline-size:100%}:host(:focus-visible) ::slotted(*){outline:2px solid var(--swc-blue-800);outline-offset:2px}`;
@@ -17380,7 +17824,7 @@ e12([n({
17380
17824
  e25("swc-conversation-turn", a14);
17381
17825
 
17382
17826
  // node_modules/@adobe/spectrum-wc/dist/components/ui-icons/ui-icons.types.js
17383
- var e89 = [
17827
+ var e90 = [
17384
17828
  50,
17385
17829
  75,
17386
17830
  100,
@@ -17400,7 +17844,7 @@ function n29(e120) {
17400
17844
  }
17401
17845
  function r26(t90, r40) {
17402
17846
  if (!t90) return;
17403
- let i26 = n29(r40), a23 = e89.filter((e120) => t90[e120] !== void 0);
17847
+ let i26 = n29(r40), a23 = e90.filter((e120) => t90[e120] !== void 0);
17404
17848
  if (a23.length !== 0) return t90[a23.reduce((e120, t91) => Math.abs(t91 - i26) < Math.abs(e120 - i26) ? t91 : e120)];
17405
17849
  }
17406
17850
 
@@ -18024,7 +18468,7 @@ e12([n({
18024
18468
  e25("swc-ui-icon", l16);
18025
18469
 
18026
18470
  // node_modules/@adobe/spectrum-wc/dist/utils/id.js
18027
- function e90(e120) {
18471
+ function e91(e120) {
18028
18472
  return `${e120}-${Array.from(crypto.getRandomValues(new Uint8Array(4)), (e121) => `0${(e121 & 255).toString(16)}`.slice(-2)).join("")}`;
18029
18473
  }
18030
18474
 
@@ -18034,7 +18478,7 @@ var t65 = i`:host{display:block}*,*:before,*:after{box-sizing:border-box}.swc-Me
18034
18478
  // node_modules/@adobe/spectrum-wc/dist/patterns/ai-toolkit/message-sources/MessageSources.js
18035
18479
  var c19 = class extends i9 {
18036
18480
  constructor(...e120) {
18037
- super(...e120), this.panelId = e90("swc-sources-panel"), this.toggleId = e90("swc-message-sources-toggle"), this.sourceLinks = [], this.open = false, this.label = "Sources", this.accessibleLabel = "";
18481
+ super(...e120), this.panelId = e91("swc-sources-panel"), this.toggleId = e91("swc-message-sources-toggle"), this.sourceLinks = [], this.open = false, this.label = "Sources", this.accessibleLabel = "";
18038
18482
  }
18039
18483
  static get styles() {
18040
18484
  return [t65];
@@ -18169,7 +18613,7 @@ var a15 = () => b`
18169
18613
  <circle cx="4" cy="4" r="4" fill="currentColor" />
18170
18614
  </svg>
18171
18615
  `;
18172
- var o62 = () => b`
18616
+ var o63 = () => b`
18173
18617
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 8">
18174
18618
  <circle cx="4" cy="4" r="3.5" fill="none" stroke="currentColor" />
18175
18619
  </svg>
@@ -18229,7 +18673,7 @@ var h6 = class extends i9 {
18229
18673
  return this._readLabel();
18230
18674
  }
18231
18675
  constructor() {
18232
- super(), this._toggleId = e90("swc-response-status-step-toggle"), this._detailId = e90("swc-response-status-step-detail"), this.status = "active", this.open = false, this._hasDescription = false, this._labelText = "", this._overflows = false, this._lastActiveLabel = "", new t2(this, {
18676
+ super(), this._toggleId = e91("swc-response-status-step-toggle"), this._detailId = e91("swc-response-status-step-detail"), this.status = "active", this.open = false, this._hasDescription = false, this._labelText = "", this._overflows = false, this._lastActiveLabel = "", new t2(this, {
18233
18677
  config: {
18234
18678
  attributes: true,
18235
18679
  attributeFilter: ["slot"],
@@ -18312,7 +18756,7 @@ var h6 = class extends i9 {
18312
18756
  class="swc-ResponseStatusStep-icon swc-ResponseStatusStep-icon--active"
18313
18757
  aria-hidden="true"
18314
18758
  >
18315
- ${o62()}
18759
+ ${o63()}
18316
18760
  </swc-icon>
18317
18761
  `);
18318
18762
  }
@@ -18386,7 +18830,7 @@ e12([n({
18386
18830
  e25("swc-response-status-step", h6);
18387
18831
 
18388
18832
  // node_modules/@adobe/spectrum-wc/dist/patterns/ai-toolkit/pixel-loader/data.js
18389
- function e91(e120, t90) {
18833
+ function e92(e120, t90) {
18390
18834
  let n37 = Array.from(new Set(e120.map(([, e121]) => e121))).sort((e121, t91) => t91 - e121), r40 = Array(e120.length).fill(0), i26 = 0;
18391
18835
  return n37.forEach((n38) => {
18392
18836
  let a23 = e120.reduce((e121, t91, r41) => (t91[1] === n38 && e121.push(r41), e121), []);
@@ -18396,7 +18840,7 @@ function e91(e120, t90) {
18396
18840
  }), r40;
18397
18841
  }
18398
18842
  function t68(t90, n37 = {}) {
18399
- let { staggerInterval: r40 = 2, rowOffset: i26 = 0 } = n37, a23 = e91(t90, r40);
18843
+ let { staggerInterval: r40 = 2, rowOffset: i26 = 0 } = n37, a23 = e92(t90, r40);
18400
18844
  return t90.map(([e120, t91], n38) => ({
18401
18845
  col: e120,
18402
18846
  row: t91 + i26,
@@ -18539,7 +18983,7 @@ var a16 = t68([
18539
18983
  [5, 0],
18540
18984
  [6, 0]
18541
18985
  ], { staggerInterval: 1 });
18542
- var o63 = t68([
18986
+ var o64 = t68([
18543
18987
  [6, 6],
18544
18988
  [5, 5],
18545
18989
  [1, 4],
@@ -19094,7 +19538,7 @@ var N = {
19094
19538
  brush: r30,
19095
19539
  eye: i19,
19096
19540
  hourglass: a16,
19097
- mag: o63,
19541
+ mag: o64,
19098
19542
  crop: s12,
19099
19543
  flower: c21,
19100
19544
  image: l17,
@@ -19185,13 +19629,13 @@ var F = {
19185
19629
  };
19186
19630
 
19187
19631
  // node_modules/@adobe/spectrum-wc/dist/patterns/ai-toolkit/pixel-loader/animation.js
19188
- var e92 = 30;
19189
- var t69 = (t90) => t90 * e92 / 1e3;
19632
+ var e93 = 30;
19633
+ var t69 = (t90) => t90 * e93 / 1e3;
19190
19634
  var n32 = 13;
19191
19635
  var r31 = 12;
19192
19636
  var i20 = t69(1400);
19193
19637
  var a17 = t69(150);
19194
- var o64 = t69(150);
19638
+ var o65 = t69(150);
19195
19639
  var s13 = 0.1;
19196
19640
  var c22 = t69(230);
19197
19641
  var l18 = 0.3;
@@ -19218,7 +19662,7 @@ function v8(e120) {
19218
19662
  return t90 + n32 + i20 + r31;
19219
19663
  }
19220
19664
  function y4(t90) {
19221
- return v8(t90) / e92 * 1e3;
19665
+ return v8(t90) / e93 * 1e3;
19222
19666
  }
19223
19667
  function b8(e120, t90) {
19224
19668
  return Math.min(1, Math.max(0, e120 / t90));
@@ -19263,7 +19707,7 @@ function S2(e120, t90) {
19263
19707
  }), x3(o91);
19264
19708
  }
19265
19709
  function C3(e120, t90) {
19266
- let i26 = e120.stagger + n32 - o64, u27 = i26 - a17, d22 = _4(e120), f11 = d22 + c22;
19710
+ let i26 = e120.stagger + n32 - o65, u27 = i26 - a17, d22 = _4(e120), f11 = d22 + c22;
19267
19711
  return x3([
19268
19712
  {
19269
19713
  offset: 0,
@@ -19335,7 +19779,7 @@ function k2(e120) {
19335
19779
  return t90 + E2 + D3 + t90 + E2;
19336
19780
  }
19337
19781
  function A4(t90) {
19338
- return k2(t90) / e92 * 1e3;
19782
+ return k2(t90) / e93 * 1e3;
19339
19783
  }
19340
19784
  function j2(e120, t90, n37) {
19341
19785
  let r40 = O2(t90), i26 = r40.indexOf(e120.row), a23 = (r40.length - 1) * T4 + E2, o91 = i26 * T4, s19 = a23 + D3 + i26 * T4;
@@ -19374,9 +19818,9 @@ function j2(e120, t90, n37) {
19374
19818
  var M2 = "0 0px";
19375
19819
 
19376
19820
  // node_modules/@adobe/spectrum-wc/dist/patterns/ai-toolkit/pixel-loader/geometry.js
19377
- var e93 = /* @__PURE__ */ new WeakMap();
19821
+ var e94 = /* @__PURE__ */ new WeakMap();
19378
19822
  function t70(t90) {
19379
- let n37 = e93.get(t90);
19823
+ let n37 = e94.get(t90);
19380
19824
  if (n37) return n37;
19381
19825
  let r40 = new Set(t90.map((e120) => `${e120.col},${e120.row}`)), i26 = (e120, t91) => r40.has(`${e120},${t91}`), a23 = t90.map(({ col: e120, row: t91 }) => {
19382
19826
  let n38 = i26(e120 - 1, t91), r41 = i26(e120 + 1, t91), a24 = i26(e120, t91 - 1), o91 = i26(e120, t91 + 1), s19 = i26(e120 - 1, t91 - 1), c28 = i26(e120 + 1, t91 - 1), l24 = i26(e120 + 1, t91 + 1), u27 = i26(e120 - 1, t91 + 1);
@@ -19387,7 +19831,7 @@ function t70(t90) {
19387
19831
  bottomLeft: !n38 && !o91 && !u27
19388
19832
  };
19389
19833
  });
19390
- return e93.set(t90, a23), a23;
19834
+ return e94.set(t90, a23), a23;
19391
19835
  }
19392
19836
  function n33(e120, t90) {
19393
19837
  return `${e120.topLeft ? t90 : "0"} ${e120.topRight ? t90 : "0"} ${e120.bottomRight ? t90 : "0"} ${e120.bottomLeft ? t90 : "0"}`;
@@ -19399,7 +19843,7 @@ var t71 = i`:host{display:inline-block}*,*:before,*:after{box-sizing:border-box}
19399
19843
  // node_modules/@adobe/spectrum-wc/dist/patterns/ai-toolkit/pixel-loader/PixelLoader.js
19400
19844
  var w4;
19401
19845
  var T5 = "https://spectrum-web-components.adobe.com/?path=/docs/patterns-ai-toolkit-pixel-loader--docs";
19402
- var E3 = class e94 extends i9 {
19846
+ var E3 = class e95 extends i9 {
19403
19847
  constructor(...e120) {
19404
19848
  super(...e120), this.icon = "aiLogo", this.paused = false, this.label = "Loading", this._presetIndex = 0, this._animations = [], this._containerCache = null, this._cellElsCache = null, this._ticker = null, this._reducedMotionQuery = null, this._displayedIcon = "aiLogo", this._finishToken = 0, this._handleReducedMotionChange = () => {
19405
19849
  this._syncTicker(), this._playCells();
@@ -19502,8 +19946,8 @@ var E3 = class e94 extends i9 {
19502
19946
  }
19503
19947
  }), this._cancelAnimations();
19504
19948
  let i26 = {
19505
- duration: e94.FINISH_MS,
19506
- easing: e94.EASE_FINISH,
19949
+ duration: e95.FINISH_MS,
19950
+ easing: e95.EASE_FINISH,
19507
19951
  fill: "forwards"
19508
19952
  }, a23 = n37.map((e120) => e120.animate([{
19509
19953
  translate: M2,
@@ -19553,7 +19997,7 @@ var E3 = class e94 extends i9 {
19553
19997
  style=${o3({
19554
19998
  "grid-column": String(t90.col + 1),
19555
19999
  "grid-row": String(t90.row + 1),
19556
- "border-radius": n33(n37, e94.CORNER_RADIUS)
20000
+ "border-radius": n33(n37, e95.CORNER_RADIUS)
19557
20001
  })}
19558
20002
  ></div>
19559
20003
  `;
@@ -19594,12 +20038,12 @@ var y5 = [
19594
20038
  "complete",
19595
20039
  "stopped"
19596
20040
  ];
19597
- var b9 = class e95 extends i9 {
20041
+ var b9 = class e96 extends i9 {
19598
20042
  static get styles() {
19599
20043
  return [t72];
19600
20044
  }
19601
20045
  constructor() {
19602
- super(), this.panelId = e90("swc-response-status-panel"), this._hasSteps = false, this._hasActiveStep = false, this._activeStepLabel = "", this._activeStepEl = null, this._labelSlotText = "", this._displayedLabel = "", this._rollFromLabel = "", this._rollToLabel = "", this._rollActive = false, this._rollEngaged = false, this.status = "active", this.open = false, this.accessibleLabel = "", this.loader = "mega", this._labelRollTimer = null, this._labelRollRaf = null, new t2(this, {
20046
+ super(), this.panelId = e91("swc-response-status-panel"), this._hasSteps = false, this._hasActiveStep = false, this._activeStepLabel = "", this._activeStepEl = null, this._labelSlotText = "", this._displayedLabel = "", this._rollFromLabel = "", this._rollToLabel = "", this._rollActive = false, this._rollEngaged = false, this.status = "active", this.open = false, this.accessibleLabel = "", this.loader = "mega", this._labelRollTimer = null, this._labelRollRaf = null, new t2(this, {
19603
20047
  config: {
19604
20048
  attributes: true,
19605
20049
  attributeFilter: ["status"],
@@ -19717,10 +20161,10 @@ var b9 = class e95 extends i9 {
19717
20161
  if (this._labelSlotText) return this._labelSlotText;
19718
20162
  let t90 = this._resolvedStatus;
19719
20163
  if (t90 === "active") {
19720
- if (this._showsGenericProcessingLabel) return e95.ACTIVE_STEP_OPEN_LABEL;
20164
+ if (this._showsGenericProcessingLabel) return e96.ACTIVE_STEP_OPEN_LABEL;
19721
20165
  if (this._activeStepLabel) return this._activeStepLabel;
19722
20166
  }
19723
- return e95.DEFAULT_LABELS[t90];
20167
+ return e96.DEFAULT_LABELS[t90];
19724
20168
  }
19725
20169
  _clearLabelRollTimers() {
19726
20170
  this._labelRollTimer !== null && (window.clearTimeout(this._labelRollTimer), this._labelRollTimer = null), this._labelRollRaf !== null && (window.cancelAnimationFrame(this._labelRollRaf), this._labelRollRaf = null);
@@ -19749,7 +20193,7 @@ var b9 = class e95 extends i9 {
19749
20193
  this._labelRollRaf = window.requestAnimationFrame(() => {
19750
20194
  this._labelRollRaf = null, this._rollEngaged = true, this._labelRollTimer = window.setTimeout(() => {
19751
20195
  this._labelRollTimer = null, this._displayedLabel = this._rollToLabel, this._rollActive = false, this._rollEngaged = false, this._applyLabelRoll();
19752
- }, e95.LABEL_ROLL_DURATION_MS);
20196
+ }, e96.LABEL_ROLL_DURATION_MS);
19753
20197
  });
19754
20198
  });
19755
20199
  }
@@ -19757,7 +20201,7 @@ var b9 = class e95 extends i9 {
19757
20201
  return this._rollActive ? this._rollToLabel : this._displayedLabel || this._getHeaderLabel();
19758
20202
  }
19759
20203
  _renderLabel() {
19760
- let t90 = e95.STATUS_LABEL_CLASS;
20204
+ let t90 = e96.STATUS_LABEL_CLASS;
19761
20205
  return this._rollActive ? b`
19762
20206
  <span class="swc-ResponseStatus-headerTrailViewport">
19763
20207
  <span class=${this._rollEngaged ? "swc-ResponseStatus-headerTrailCrossfade swc-ResponseStatus-headerTrailCrossfade--engaged" : "swc-ResponseStatus-headerTrailCrossfade"}>
@@ -19873,7 +20317,7 @@ var b9 = class e95 extends i9 {
19873
20317
  `;
19874
20318
  }
19875
20319
  _renderPanel(t90) {
19876
- let n37 = t90 && this.open, r40 = this.accessibleLabel || e95.DEFAULT_ACCESSIBLE_LABEL;
20320
+ let n37 = t90 && this.open, r40 = this.accessibleLabel || e96.DEFAULT_ACCESSIBLE_LABEL;
19877
20321
  return b`
19878
20322
  <div
19879
20323
  id=${this.panelId}
@@ -19938,7 +20382,7 @@ var t73 = i`:host{display:block}*,*:before,*:after{box-sizing:border-box}.swc-Su
19938
20382
  // node_modules/@adobe/spectrum-wc/dist/patterns/ai-toolkit/suggestion/SuggestionGroup.js
19939
20383
  var s14 = class extends i9 {
19940
20384
  constructor(...e120) {
19941
- super(...e120), this.accessibleLabel = "", this._headingId = e90("swc-suggestion-group-heading");
20385
+ super(...e120), this.accessibleLabel = "", this._headingId = e91("swc-suggestion-group-heading");
19942
20386
  }
19943
20387
  static get styles() {
19944
20388
  return [t73];
@@ -20101,29 +20545,11 @@ e12([n({
20101
20545
  e25("swc-user-message", a18);
20102
20546
 
20103
20547
  // node_modules/@adobe/spectrum-wc-icons/dist/Cancel.js
20104
- function e96() {
20548
+ function e97() {
20105
20549
  return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M16.201 16.166A8.72 8.72 0 0 0 18.75 10c0-4.825-3.925-8.75-8.75-8.75a8.72 8.72 0 0 0-6.166 2.549l-.021.014c-.011.007-.008.015-.014.021A8.72 8.72 0 0 0 1.25 10c0 4.825 3.925 8.75 8.75 8.75a8.72 8.72 0 0 0 6.166-2.549c.006-.006.015-.008.021-.014s.008-.015.014-.021M17.25 10c0 1.73-.61 3.317-1.625 4.565L5.435 4.375A7.2 7.2 0 0 1 10 2.75c3.998 0 7.25 3.252 7.25 7.25m-14.5 0c0-1.73.61-3.317 1.625-4.565l10.19 10.19A7.2 7.2 0 0 1 10 17.25c-3.998 0-7.25-3.252-7.25-7.25"/></svg>';
20106
20550
  }
20107
20551
 
20108
20552
  // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-cancel.js
20109
- var o65 = class extends a10 {
20110
- static get styles() {
20111
- return [t40];
20112
- }
20113
- render() {
20114
- return b`
20115
- <span class="swc-Icon">${o16(e96())}</span>
20116
- `;
20117
- }
20118
- };
20119
- e25("swc-icon-cancel", o65);
20120
-
20121
- // node_modules/@adobe/spectrum-wc-icons/dist/ChevronRight.js
20122
- function e97() {
20123
- return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="var(--swc-icon-color, currentColor)" d="M7.75 16.465a.748.748 0 0 1-.54-1.27l4.999-5.197-4.986-5.184a.75.75 0 0 1 .02-1.06.75.75 0 0 1 1.06.021L13.79 9.48c.28.29.28.749 0 1.039l-5.5 5.716a.75.75 0 0 1-.54.23"/></svg>';
20124
- }
20125
-
20126
- // node_modules/@adobe/spectrum-wc-icons/dist/swc-icon-chevron-right.js
20127
20553
  var o66 = class extends a10 {
20128
20554
  static get styles() {
20129
20555
  return [t40];
@@ -20134,7 +20560,7 @@ var o66 = class extends a10 {
20134
20560
  `;
20135
20561
  }
20136
20562
  };
20137
- e25("swc-icon-chevron-right", o66);
20563
+ e25("swc-icon-cancel", o66);
20138
20564
 
20139
20565
  // node_modules/@adobe/spectrum-wc-icons/dist/File.js
20140
20566
  function e98() {
@@ -20305,11 +20731,11 @@ function run(lines, start, test) {
20305
20731
  return end;
20306
20732
  }
20307
20733
  var itemPattern = /^(\s*)([-*]|\d+\.)\s+(.*)$/;
20308
- function indent(line) {
20734
+ function indent2(line) {
20309
20735
  return line.match(/^\s*/)?.[0].length ?? 0;
20310
20736
  }
20311
20737
  function list2(lines) {
20312
- const base = indent(lines[0]);
20738
+ const base = indent2(lines[0]);
20313
20739
  const ordered2 = /^\s*\d+\./.test(lines[0]);
20314
20740
  const items = [];
20315
20741
  let i26 = 0;
@@ -20321,7 +20747,7 @@ function list2(lines) {
20321
20747
  i26++;
20322
20748
  continue;
20323
20749
  }
20324
- const end = run(lines, i26 + 1, (line) => indent(line) > base);
20750
+ const end = run(lines, i26 + 1, (line) => indent2(line) > base);
20325
20751
  let child = i26 + 1;
20326
20752
  let text2 = match[3];
20327
20753
  while (child < end && !itemPattern.test(lines[child])) text2 += ` ${lines[child++].trim()}`;
@@ -20361,7 +20787,7 @@ function block2(lines, i26) {
20361
20787
  const end2 = run(
20362
20788
  lines,
20363
20789
  i26,
20364
- (l24) => itemPattern.test(l24) || l24.trim() !== "" && indent(l24) > indent(line)
20790
+ (l24) => itemPattern.test(l24) || l24.trim() !== "" && indent2(l24) > indent2(line)
20365
20791
  );
20366
20792
  return [list2(lines.slice(i26, end2)), end2];
20367
20793
  }
@@ -20787,20 +21213,20 @@ function attachment(item2) {
20787
21213
  <span slot="subtitle" class="size">${detail}</span>
20788
21214
  </swc-user-message>`;
20789
21215
  }
20790
- var deliveries = { steer: "Steered", "follow-up": "Follow-up" };
21216
+ function when(at, title = "") {
21217
+ return b`<time class="when" datetime=${new Date(at).toISOString()} title=${title || A}>${time(at)}</time>`;
21218
+ }
20791
21219
  function user(message) {
20792
21220
  const delivered = message.delivered ?? (message.mode === "steer" ? "steer" : void 0);
20793
- const tag3 = delivered === "steer" || delivered === "follow-up" ? deliveries[delivered] : null;
20794
21221
  const agent = message.origin === "agent";
20795
21222
  const name = message.from ?? "an agent";
20796
- const who2 = agent ? name : message.from ? `From ${message.from}` : "You";
21223
+ const who2 = agent ? name : message.from ? `From ${message.from}` : "";
20797
21224
  const label = agent ? `Request from ${name}` : message.from ? `Message from ${message.from}` : "Your message";
20798
21225
  return b`<swc-conversation-turn type="user" class="message user" accessible-label=${label} data-id=${message.id} data-mode=${message.mode ?? "send"} data-delivered=${delivered ?? "run"} data-origin=${message.origin ?? "user"}>
20799
21226
  <div class="bubble">
20800
21227
  <div class="meta">
20801
- <span class="who">${who2}</span><span>${time(message.createdAt)}</span>
21228
+ ${who2 ? b`<span class="who">${who2}</span>` : A}${when(message.createdAt)}
20802
21229
  ${agent ? b`<swc-badge class="origin" size="s" variant="indigo">Agent</swc-badge>` : A}
20803
- ${tag3 ? b`<swc-badge class="tag" size="s" variant=${delivered === "steer" ? "notice" : "informative"} subtle>${tag3}</swc-badge>` : A}
20804
21230
  </div>
20805
21231
  ${message.text ? b`<swc-user-message class="body"><span class="text">${message.text}</span></swc-user-message>` : A}
20806
21232
  ${message.attachments?.length ? b`<div class="attachments">${message.attachments.map(attachment)}</div>` : A}
@@ -20839,8 +21265,8 @@ function assistant(message, name, model, handlers, showThinking, suggestion = nu
20839
21265
  return b`<swc-conversation-turn type="system" class="message assistant" accessible-label=${`Reply from ${name}`} data-id=${message.id} data-status=${message.status}>
20840
21266
  <div class="reply">
20841
21267
  <div class="meta">
20842
- <span class="who">${name}</span><span>${time(message.createdAt)}</span>
20843
- ${model ? b`<span title=${usage}>${model}</span>` : A}
21268
+ ${when(message.createdAt, model ? "" : usage)}
21269
+ ${model ? b`<span class="model" title=${usage}>${model}</span>` : A}
20844
21270
  ${message.status === "error" ? b`<swc-badge class="tag" size="s" variant="negative" subtle><swc-icon-alert-diamond slot="icon" size="s" aria-hidden="true"></swc-icon-alert-diamond>Failed</swc-badge>` : A}
20845
21271
  </div>
20846
21272
  <swc-system-message>
@@ -22321,7 +22747,7 @@ var SliccApp = class extends ThemedElement {
22321
22747
  constructor() {
22322
22748
  super();
22323
22749
  this.screen = screenClass(globalThis.innerWidth ?? 1280);
22324
- this.surfaces = surfaces;
22750
+ this.surfaces = surfaces2;
22325
22751
  }
22326
22752
  static styles = [
22327
22753
  theme,
@@ -22972,7 +23398,7 @@ var SliccApp = class extends ThemedElement {
22972
23398
  return Boolean(cone && !cone.frozen && this.model?.agent.freeze && !watchOnly(this.model));
22973
23399
  }
22974
23400
  #creatable() {
22975
- return Boolean(this.model?.agent.createCone) && !watchOnly(this.model);
23401
+ return creatable(this.model);
22976
23402
  }
22977
23403
  #cone() {
22978
23404
  const agent = this.#active();
@@ -23005,22 +23431,7 @@ var SliccApp = class extends ThemedElement {
23005
23431
  this.renderRoot.querySelector("header sp-picker")?.focus();
23006
23432
  }
23007
23433
  async #newCone(trigger2) {
23008
- const port = this.model?.agent;
23009
- const create3 = port?.createCone?.bind(port);
23010
- if (!port || !create3) return;
23011
- let created;
23012
- await prompt({
23013
- title: "New cone",
23014
- label: "Name",
23015
- action: "Create",
23016
- trigger: trigger2,
23017
- submit: async (name) => {
23018
- if (watchOnly(this.model)) return;
23019
- created = await create3(name);
23020
- }
23021
- });
23022
- if (!created) return;
23023
- port.select(created.id);
23434
+ if (!await createCone(this.model, trigger2)) return;
23024
23435
  await this.updateComplete;
23025
23436
  this.renderRoot.querySelector("header sp-picker")?.focus();
23026
23437
  }
@@ -23343,12 +23754,12 @@ function scan2(words, cwds, whole) {
23343
23754
  }
23344
23755
  return null;
23345
23756
  }
23346
- function secretRules(approval) {
23347
- if (approval.command.length > 4096) return `${approval.command.slice(0, 40)}\u2026`;
23348
- const start = absolute("/", approval.cwd ?? "/");
23757
+ function reach2(command3, cwd) {
23758
+ if (command3.length > 4096) return `${command3.slice(0, 40)}\u2026`;
23759
+ const start = absolute("/", cwd ?? "/");
23349
23760
  if (protects(start, false)) return start;
23350
23761
  const cwds = /* @__PURE__ */ new Set([start]);
23351
- const text2 = unglob(ansi(approval.command.replace(/\\\n/g, "")));
23762
+ const text2 = unglob(ansi(command3.replace(/\\\n/g, "")));
23352
23763
  const plain = text2.split(separators).map((segment2) => commas(segment2.split(/[\s<>=]+/).map((word) => word.replace(/['"\\]/g, ""))));
23353
23764
  const aware = shield(text2).split(separators).map((segment2) => commas(quoted(unshield(segment2))));
23354
23765
  const segments = JSON.stringify(aware) === JSON.stringify(plain) ? plain : [...plain, ...aware];
@@ -23363,6 +23774,14 @@ function secretRules(approval) {
23363
23774
  if (home2) return home2;
23364
23775
  return segments.flat().some((word) => word.includes("$")) || text2.includes("`") ? text2.match(expansion)[0] : null;
23365
23776
  }
23777
+ function secretRules(command3, cwd) {
23778
+ const hit = reach2(command3, cwd);
23779
+ return hit && certain(hit) ? { certain: hit, maybe: null } : { certain: null, maybe: hit };
23780
+ }
23781
+ function origin() {
23782
+ const active = focused();
23783
+ return active?.closest("slicc-terminal") ?? active;
23784
+ }
23366
23785
  function waiting(model, now) {
23367
23786
  return [...model?.approvals?.list() ?? []].filter((approval) => approval.expiresAt > now).sort((a23, b13) => a23.createdAt - b13.createdAt);
23368
23787
  }
@@ -23503,7 +23922,8 @@ var SliccApprovals = class extends ModelElement {
23503
23922
  async decide(approval, decision) {
23504
23923
  const port = this.model?.approvals;
23505
23924
  if (!port?.decide || this.busy || decision !== "deny" && !this.#armed) return;
23506
- if (decision === "always" && secretRules(approval)) return;
23925
+ const verdict = secretRules(approval.command, approval.cwd);
23926
+ if (decision === "always" && (verdict.certain ?? verdict.maybe)) return;
23507
23927
  this.busy = decision;
23508
23928
  this.failure = null;
23509
23929
  this.#pending.add(approval.id);
@@ -23547,7 +23967,7 @@ var SliccApprovals = class extends ModelElement {
23547
23967
  const dialog = this.renderRoot.querySelector("dialog");
23548
23968
  const key2 = dialog ? `${dialog.dataset.approval}:${dialog.dataset.gone ?? ""}` : "";
23549
23969
  if (key2 === this.#shown) return;
23550
- if (dialog && !this.#shown) this.#trigger = focused();
23970
+ if (dialog && !this.#shown) this.#trigger = origin();
23551
23971
  this.#shown = key2;
23552
23972
  if (!dialog) {
23553
23973
  if (this.#trigger?.isConnected) this.#trigger.focus();
@@ -23608,7 +24028,8 @@ var SliccApprovals = class extends ModelElement {
23608
24028
  const [approval, ...rest] = held ? [held, ...list5.filter(({ id }) => id !== held.id)] : list5;
23609
24029
  if (!approval) return A;
23610
24030
  const failure2 = this.failure?.id === approval.id ? this.failure.message : "";
23611
- const rules = secretRules(approval);
24031
+ const verdict = secretRules(approval.command, approval.cwd);
24032
+ const rules = verdict.certain ?? verdict.maybe;
23612
24033
  const always = approval.always && !rules;
23613
24034
  return this.#dialog(
23614
24035
  approval,
@@ -23617,7 +24038,7 @@ var SliccApprovals = class extends ModelElement {
23617
24038
  <h2 id="title" slot="heading">Allow sudo?</h2>
23618
24039
  ${this.#request(approval)}
23619
24040
  ${approval.cwd ? b`<p class="cwd">In ${approval.cwd}</p>` : A}
23620
- ${rules ? b`<div class="rules" data-secret-rules=${rules}><swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle><p>${certain(rules) ? b`<strong>This changes secret rules.</strong> It names <code>${rules}</code>, where SLICC keeps which secrets programs may use and where they may be sent.` : b`<strong>This may change secret rules.</strong> SLICC can't tell where <code>${rules}</code> leads, and it could reach the files where SLICC keeps which secrets programs may use and where they may be sent.`} Allow it only if you asked for this change.</p></div>` : A}
24041
+ ${rules ? b`<div class="rules" data-secret-rules=${rules}><swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle><p>${verdict.certain ? b`<strong>This changes secret rules.</strong> It names <code>${rules}</code>, where SLICC keeps which secrets programs may use and where they may be sent.` : b`<strong>This may change secret rules.</strong> SLICC can't tell where <code>${rules}</code> leads, and it could reach the files where SLICC keeps which secrets programs may use and where they may be sent.`} Allow it only if you asked for this change.</p></div>` : A}
23621
24042
  ${always ? b`<p class="hint">Always allow lets ${approval.requester.name} run exactly this command with sudo without asking again.</p>` : A}
23622
24043
  ${failure2 ? b`<p class="problem" role="alert" data-error><swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle><span>${failure2}</span></p>` : A}
23623
24044
  <p class="timer" data-timer>Denied automatically in ${countdown(approval.expiresAt - this.now)}.</p>
@@ -23951,8 +24372,8 @@ function since2(at, now = Date.now()) {
23951
24372
  function called(value = "") {
23952
24373
  const url = value.split(" ").at(-1);
23953
24374
  try {
23954
- const { origin, pathname } = new URL(url);
23955
- return `Called ${origin}${pathname}`;
24375
+ const { origin: origin2, pathname } = new URL(url);
24376
+ return `Called ${origin2}${pathname}`;
23956
24377
  } catch {
23957
24378
  return `Called ${url}`.trim();
23958
24379
  }
@@ -24000,7 +24421,9 @@ var icons = {
24000
24421
  };
24001
24422
  var refresh = 1e4;
24002
24423
  var fresh = 3e3;
24424
+ var actionPage = 50;
24003
24425
  var narrowWidth = 480;
24426
+ var linked = /* @__PURE__ */ new Set(["open", "goto", "request"]);
24004
24427
  var wideWidth = 720;
24005
24428
  var offline = b`<svg viewBox="0 0 96 72" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="6" y="8" width="84" height="56" rx="6"/><path d="M6 22h84"/><circle cx="16" cy="15" r="1.5"/><circle cx="24" cy="15" r="1.5"/><path d="M38 34l20 20M58 34L38 54"/></svg>`;
24006
24429
  var SliccBrowser = class extends ModelElement {
@@ -24020,7 +24443,10 @@ var SliccBrowser = class extends ModelElement {
24020
24443
  #width = 0;
24021
24444
  #copied = null;
24022
24445
  #command = null;
24023
- #count = 0;
24446
+ #last = null;
24447
+ #shown = actionPage;
24448
+ #anchor = null;
24449
+ #expanded = /* @__PURE__ */ new Set();
24024
24450
  constructor() {
24025
24451
  super();
24026
24452
  this.address = "";
@@ -24224,8 +24650,15 @@ var SliccBrowser = class extends ModelElement {
24224
24650
  font-family: var(--swc-code-font-family-stack);
24225
24651
  color: var(--swc-neutral-subdued-content-color-default);
24226
24652
  }
24227
- .narrow .driving swc-button {
24228
- flex: 1 0 100%;
24653
+ .detail .driving {
24654
+ flex-wrap: nowrap;
24655
+ min-block-size: var(--swc-component-height-75);
24656
+ }
24657
+ .detail .driving swc-status-light {
24658
+ min-width: 0;
24659
+ }
24660
+ .detail .driving swc-button {
24661
+ flex: none;
24229
24662
  }
24230
24663
  .swc-Link {
24231
24664
  font-size: inherit;
@@ -24298,6 +24731,7 @@ var SliccBrowser = class extends ModelElement {
24298
24731
  user-select: none;
24299
24732
  }
24300
24733
  figcaption {
24734
+ min-block-size: var(--swc-component-height-50);
24301
24735
  display: flex;
24302
24736
  align-items: center;
24303
24737
  justify-content: space-between;
@@ -24311,8 +24745,84 @@ var SliccBrowser = class extends ModelElement {
24311
24745
  color: var(--swc-heading-color);
24312
24746
  }
24313
24747
  summary {
24748
+ display: flex;
24749
+ align-items: center;
24750
+ gap: var(--swc-spacing-100);
24751
+ min-block-size: var(--swc-component-height-75);
24752
+ padding-inline: var(--swc-spacing-75);
24753
+ margin-inline: calc(-1 * var(--swc-spacing-75));
24754
+ border-radius: var(--swc-corner-radius-medium-default);
24755
+ list-style: none;
24756
+ cursor: pointer;
24757
+ }
24758
+ summary::-webkit-details-marker {
24759
+ display: none;
24760
+ }
24761
+ summary:hover {
24762
+ background: var(--swc-gray-100);
24763
+ }
24764
+ summary:focus-visible,
24765
+ .url-toggle:focus-visible,
24766
+ .actions:focus-visible {
24767
+ outline: var(--swc-focus-indicator-thickness) solid var(--swc-focus-indicator-color);
24768
+ outline-offset: var(--swc-focus-ring-gap);
24769
+ }
24770
+ .chevron {
24771
+ flex: none;
24772
+ color: var(--swc-neutral-subdued-content-color-default);
24773
+ transition: transform var(--swc-animation-duration-100);
24774
+ }
24775
+ details[open] > summary .chevron {
24776
+ transform: rotate(90deg);
24777
+ }
24778
+ .url-toggle[aria-expanded='true'] .chevron {
24779
+ transform: rotate(180deg);
24780
+ }
24781
+ :host(:dir(rtl)) details:not([open]) > summary .chevron {
24782
+ transform: scaleX(-1);
24783
+ }
24784
+ @media (prefers-reduced-motion: reduce) {
24785
+ .chevron {
24786
+ transition: none;
24787
+ }
24788
+ }
24789
+ .more {
24790
+ display: flex;
24791
+ align-items: center;
24792
+ justify-content: space-between;
24793
+ gap: var(--swc-spacing-200);
24794
+ padding-block-end: var(--swc-spacing-75);
24795
+ color: var(--swc-neutral-subdued-content-color-default);
24796
+ }
24797
+ .url-toggle {
24798
+ display: inline-flex;
24799
+ align-self: flex-start;
24800
+ align-items: center;
24801
+ gap: var(--swc-spacing-50);
24802
+ max-width: 100%;
24803
+ margin: 0;
24804
+ padding: 0;
24805
+ border: 0;
24806
+ border-radius: var(--swc-corner-radius-small-default);
24807
+ background: none;
24808
+ color: inherit;
24809
+ font: inherit;
24810
+ text-align: start;
24314
24811
  cursor: pointer;
24315
24812
  }
24813
+ .url-toggle > span {
24814
+ min-width: 0;
24815
+ }
24816
+ .url-toggle:hover > span {
24817
+ text-decoration: underline;
24818
+ }
24819
+ .full {
24820
+ font-family: var(--swc-code-font-family-stack);
24821
+ color: var(--swc-neutral-subdued-content-color-default);
24822
+ overflow-wrap: anywhere;
24823
+ white-space: normal;
24824
+ user-select: text;
24825
+ }
24316
24826
  .actions {
24317
24827
  display: flex;
24318
24828
  flex-direction: column;
@@ -24340,7 +24850,8 @@ var SliccBrowser = class extends ModelElement {
24340
24850
  min-width: 0;
24341
24851
  overflow-wrap: anywhere;
24342
24852
  }
24343
- .last .what {
24853
+ .last .what > :not(.full),
24854
+ .last .url-toggle > span {
24344
24855
  overflow: hidden;
24345
24856
  text-overflow: ellipsis;
24346
24857
  white-space: nowrap;
@@ -24406,6 +24917,8 @@ var SliccBrowser = class extends ModelElement {
24406
24917
  this.#shots.clear();
24407
24918
  this.#frames.clear();
24408
24919
  this.#pulse.clear();
24920
+ this.#expanded.clear();
24921
+ this.#shown = actionPage;
24409
24922
  const tabs = model.browser.list();
24410
24923
  this.#driven = new Set(tabs.filter((tab) => tab.controlled).map((tab) => tab.id));
24411
24924
  this.#focus = this.#latest(model, tabs);
@@ -24505,7 +25018,7 @@ var SliccBrowser = class extends ModelElement {
24505
25018
  try {
24506
25019
  const src = await model.browser.screenshot(id);
24507
25020
  const now = model.browser.list().find((candidate) => candidate.id === id);
24508
- if (this.model === model && now && this.#key(now) === key2) {
25021
+ if (this.model === model && now && this.#key(now) === key2 && this.#watching?.tabId !== id) {
24509
25022
  this.#shots.set(id, { key: key2, src, at: Date.now() });
24510
25023
  this.requestUpdate();
24511
25024
  }
@@ -24523,6 +25036,7 @@ var SliccBrowser = class extends ModelElement {
24523
25036
  #show(id) {
24524
25037
  this.#focus = id;
24525
25038
  this.#copied = null;
25039
+ this.#shown = actionPage;
24526
25040
  if (id) this.#pulse.delete(id);
24527
25041
  this.requestUpdate();
24528
25042
  }
@@ -24537,9 +25051,11 @@ var SliccBrowser = class extends ModelElement {
24537
25051
  this.#ticker = setInterval(() => this.requestUpdate(), 1e3);
24538
25052
  if (!(visible2 && tab)) this.#still();
24539
25053
  const list5 = this.renderRoot.querySelector(".actions:not(.last)");
24540
- const count = list5?.childElementCount ?? 0;
24541
- if (list5 && count !== this.#count) list5.scrollTop = list5.scrollHeight;
24542
- this.#count = count;
25054
+ const last = list5?.lastElementChild?.getAttribute("data-action-id") ?? null;
25055
+ if (list5 && this.#anchor !== null) list5.scrollTop = list5.scrollHeight - this.#anchor;
25056
+ else if (list5 && last !== this.#last) list5.scrollTop = list5.scrollHeight;
25057
+ this.#anchor = null;
25058
+ this.#last = last;
24543
25059
  }
24544
25060
  #still() {
24545
25061
  if (this.#ticker) clearInterval(this.#ticker);
@@ -24587,10 +25103,10 @@ var SliccBrowser = class extends ModelElement {
24587
25103
  #who(tab) {
24588
25104
  return tab.agentId ? `${agentName(this.model, tab.agentId)} is using this tab` : "In use";
24589
25105
  }
24590
- #stopButton(tab, refocus, justified = false) {
25106
+ #stopButton(tab, refocus) {
24591
25107
  if (!tab.agentId || watchOnly(this.model)) return A;
24592
25108
  const agentId = tab.agentId;
24593
- return b`<swc-button size="s" variant="secondary" ?justified=${justified} data-action="stop-agent" @click=${() => this.#stop(agentId, refocus)}>Stop ${agentName(this.model, agentId)}</swc-button>`;
25109
+ return b`<swc-button size="s" variant="secondary" data-action="stop-agent" @click=${() => this.#stop(agentId, refocus)}>Stop ${agentName(this.model, agentId)}</swc-button>`;
24594
25110
  }
24595
25111
  #card(tab, active) {
24596
25112
  const model = this.model;
@@ -24669,28 +25185,52 @@ var SliccBrowser = class extends ModelElement {
24669
25185
  </figcaption>
24670
25186
  </figure>`;
24671
25187
  }
25188
+ #more(total) {
25189
+ const list5 = this.renderRoot.querySelector(".actions:not(.last)");
25190
+ this.#anchor = list5.scrollHeight - list5.scrollTop;
25191
+ this.#shown += actionPage;
25192
+ const done2 = this.#shown >= total;
25193
+ void this.updateComplete.then(() => {
25194
+ if (done2) this.focusOn(".actions:not(.last)");
25195
+ });
25196
+ this.requestUpdate();
25197
+ }
25198
+ #toggle(id) {
25199
+ if (!this.#expanded.delete(id)) this.#expanded.add(id);
25200
+ this.requestUpdate();
25201
+ }
25202
+ #what(action) {
25203
+ const url = linked.has(action.kind) ? action.value : void 0;
25204
+ if (!url) return b`<span>${describe(action)}</span>`;
25205
+ const open = this.#expanded.has(action.id);
25206
+ return b`<button class="url-toggle" data-action="action-url" aria-expanded=${open ? "true" : "false"} aria-controls=${`url-${action.id}`} @click=${() => this.#toggle(action.id)}><span>${describe(action)}</span><swc-icon-chevron-down class="chevron" size="s" aria-hidden="true"></swc-icon-chevron-down></button>${open ? b`<span class="full" id=${`url-${action.id}`}>${url}</span>` : A}`;
25207
+ }
24672
25208
  #row(action) {
24673
25209
  const failed2 = action.status === "failed";
24674
- return b`<li data-action-id=${action.id} data-kind=${action.kind} data-status=${action.status} title=${action.kind === "request" ? action.value ?? "" : A}>
25210
+ const url = linked.has(action.kind) ? action.value : void 0;
25211
+ return b`<li data-action-id=${action.id} data-kind=${action.kind} data-status=${action.status} title=${url ?? A}>
24675
25212
  <span>${action.status === "running" ? b`<swc-progress-circle size="s" indeterminate label="Running"></swc-progress-circle>` : failed2 ? b`<swc-icon-alert-triangle size="s" aria-label="Failed"></swc-icon-alert-triangle>` : icons[action.kind]}</span>
24676
- <span class="what"><span>${describe(action)}</span>${failed2 && action.error ? b`<span class="failure">${action.error}</span>` : A}</span>
25213
+ <span class="what">${this.#what(action)}${failed2 && action.error ? b`<span class="failure">${action.error}</span>` : A}</span>
24677
25214
  <span class="who">${agentName(this.model, action.agentId)} ${time(action.at)}</span>
24678
25215
  </li>`;
24679
25216
  }
24680
25217
  #actions(tab) {
24681
25218
  const port = this.model.browser;
24682
25219
  if (!port.actions) return A;
24683
- const actions2 = port.actions().filter(
25220
+ const all2 = port.actions().filter(
24684
25221
  (action) => action.tabId === tab.id || action.tabId === null && action.agentId !== null && action.agentId === tab.agentId
24685
- ).slice(-50);
24686
- if (!actions2.length)
25222
+ );
25223
+ if (!all2.length)
24687
25224
  return b`<h3>Recent actions</h3><p class="muted" data-actions="none">No actions yet.</p>`;
25225
+ const actions2 = all2.slice(-this.#shown);
25226
+ const more = all2.length > actions2.length ? b`<div class="more"><span>Showing the latest ${actions2.length} of ${all2.length}</span><swc-button size="s" variant="secondary" fill-style="outline" data-action="more-actions" @click=${() => this.#more(all2.length)}>Show more</swc-button></div>` : A;
24688
25227
  if (this.#width >= narrowWidth)
24689
- return b`<h3>Recent actions</h3><ol class="actions" aria-label="Recent actions">${actions2.map((action) => this.#row(action))}</ol>`;
25228
+ return b`<h3>Recent actions</h3>${more}<ol class="actions" aria-label="Recent actions" tabindex="0">${actions2.map((action) => this.#row(action))}</ol>`;
24690
25229
  const last = actions2.at(-1);
24691
25230
  return b`<details>
24692
- <summary>Recent actions (${actions2.length})</summary>
24693
- <ol class="actions" aria-label="Earlier actions">${actions2.slice(0, -1).map((action) => this.#row(action))}</ol>
25231
+ <summary><swc-icon-chevron-right class="chevron" size="s" aria-hidden="true"></swc-icon-chevron-right>Recent actions (${all2.length})</summary>
25232
+ ${more}
25233
+ <ol class="actions" aria-label="Earlier actions" tabindex="0">${actions2.slice(0, -1).map((action) => this.#row(action))}</ol>
24694
25234
  </details>
24695
25235
  <ol class="actions last" aria-label="Last action">${this.#row(last)}</ol>`;
24696
25236
  }
@@ -24717,7 +25257,7 @@ var SliccBrowser = class extends ModelElement {
24717
25257
  </div>
24718
25258
  <div class="driving" data-driving=${tab.controlled ? tab.agentId ? "agent" : "user" : "none"}>
24719
25259
  <swc-status-light size="m" variant=${tab.controlled ? "info" : "neutral"}>${tab.controlled ? this.#who(tab) : "No agent is using this tab"}</swc-status-light>
24720
- ${tab.controlled ? this.#stopButton(tab, '[data-action="all-tabs"]', narrow) : A}
25260
+ ${tab.controlled ? this.#stopButton(tab, '[data-action="all-tabs"]') : A}
24721
25261
  </div>
24722
25262
  ${this.#view(tab)}
24723
25263
  ${this.#actions(tab)}
@@ -25912,11 +26452,11 @@ var SliccChat = class extends ThemedElement {
25912
26452
  new CustomEvent("show-surface", { detail: { id: "settings" }, bubbles: true, composed: true })
25913
26453
  );
25914
26454
  }
25915
- #message(message, agent, suggestion) {
26455
+ #message(message, agent, suggestion, changed) {
25916
26456
  const model = this.model;
25917
26457
  switch (message.role) {
25918
26458
  case "assistant": {
25919
- const label = model.settings.models().find((option2) => option2.id === (message.model ?? ""))?.label ?? message.model ?? "";
26459
+ const label = changed ? model.settings.models().find((option2) => option2.id === message.model)?.label ?? message.model : "";
25920
26460
  return assistant(
25921
26461
  message,
25922
26462
  agent.name,
@@ -25939,6 +26479,7 @@ var SliccChat = class extends ThemedElement {
25939
26479
  #items(messages, agent) {
25940
26480
  const out = [];
25941
26481
  let previous = "";
26482
+ let shown4;
25942
26483
  const model = this.model;
25943
26484
  const last = messages.at(-1);
25944
26485
  const suggestion = last?.role === "assistant" && !agent.frozen && !watchOnly(model) && !model.agent.busy(agent.id) ? model.agent.suggestion(agent.id) : null;
@@ -25953,7 +26494,13 @@ var SliccChat = class extends ThemedElement {
25953
26494
  ]);
25954
26495
  previous = label;
25955
26496
  }
25956
- out.push([message.id, this.#message(message, agent, message === last ? suggestion : null)]);
26497
+ const next = message.role === "assistant" ? message.model : void 0;
26498
+ const changed = !!next && next !== shown4;
26499
+ if (changed) shown4 = next;
26500
+ out.push([
26501
+ message.id,
26502
+ this.#message(message, agent, message === last ? suggestion : null, changed)
26503
+ ]);
25957
26504
  }
25958
26505
  return out;
25959
26506
  }
@@ -26038,7 +26585,7 @@ var D4 = (e120) => {
26038
26585
  var O3 = typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("field-sizing", "content");
26039
26586
  var k3 = class extends i9 {
26040
26587
  constructor() {
26041
- super(), this.labelId = e90("swc-prompt-field-label"), this.disabled = false, this.generating = false, this.collapsed = false, this.variant = "balanced", this.size = "m", this.loader = "aiLogo", this.animateLoader = false, this.label = "Prompt", this.accessibleLabel = "", this.sendLabel = "Send", this.stopLabel = "Stop generating", this.uploadLabel = "Add attachment", this.attachmentScrollPrevLabel = "Show previous attachments", this.attachmentScrollNextLabel = "Show more attachments", this.attachmentStripLabel = "Uploaded assets strip", this.placeholder = "Ready to get started? Ask a question, share an idea, or add a task.", this.value = "", this._attachmentScrollOverflow = false, this._attachmentCanScrollPrev = false, this._attachmentCanScrollNext = false, this._attachmentScrollFallbackGeneration = 0, this._attachmentScrollObserver = new s8(this, {
26588
+ super(), this.labelId = e91("swc-prompt-field-label"), this.disabled = false, this.generating = false, this.collapsed = false, this.variant = "balanced", this.size = "m", this.loader = "aiLogo", this.animateLoader = false, this.label = "Prompt", this.accessibleLabel = "", this.sendLabel = "Send", this.stopLabel = "Stop generating", this.uploadLabel = "Add attachment", this.attachmentScrollPrevLabel = "Show previous attachments", this.attachmentScrollNextLabel = "Show more attachments", this.attachmentStripLabel = "Uploaded assets strip", this.placeholder = "Ready to get started? Ask a question, share an idea, or add a task.", this.value = "", this._attachmentScrollOverflow = false, this._attachmentCanScrollPrev = false, this._attachmentCanScrollNext = false, this._attachmentScrollFallbackGeneration = 0, this._attachmentScrollObserver = new s8(this, {
26042
26589
  target: null,
26043
26590
  callback: () => {
26044
26591
  this._updateAttachmentScrollState();
@@ -27363,6 +27910,11 @@ var SliccComposer = class extends ThemedElement {
27363
27910
  flex: none;
27364
27911
  color: var(--swc-neutral-subdued-content-color-default);
27365
27912
  }
27913
+ .queued .next {
27914
+ flex: none;
27915
+ font-size: var(--swc-font-size-75);
27916
+ color: var(--swc-neutral-subdued-content-color-default);
27917
+ }
27366
27918
  .queued .text {
27367
27919
  flex: 1;
27368
27920
  min-width: 0;
@@ -28086,17 +28638,17 @@ var SliccComposer = class extends ThemedElement {
28086
28638
  const model = this.model;
28087
28639
  return b`<ul class="queue" aria-label="Queued messages">
28088
28640
  ${queued.map(
28089
- (message) => b`<li class="queued" data-id=${message.id}>
28641
+ (message) => b`<li class="queued" data-id=${message.id} data-mode=${message.mode ?? "queue"}>
28090
28642
  <swc-icon-clock size="s" aria-hidden="true"></swc-icon-clock>
28091
- <span class="text"><span class="sr">Queued: </span>${message.text}</span>
28092
- <swc-action-button size="s" quiet data-action="send-now" @click=${() => {
28643
+ <span class="text"><span class="sr">${message.mode === "steer" ? "Steering: " : "Queued: "}</span>${message.text}</span>
28644
+ ${message.mode === "steer" ? b`<span class="next">Sends at the next step</span>` : b`<swc-action-button size="s" quiet data-action="send-now" @click=${() => {
28093
28645
  model.agent.unqueue(this.#agent, message.id);
28094
28646
  void model.agent.send(this.#agent, {
28095
28647
  text: message.text,
28096
28648
  attachments: message.attachments,
28097
28649
  mode: "steer"
28098
28650
  });
28099
- }}>Send now</swc-action-button>
28651
+ }}>Send now</swc-action-button>`}
28100
28652
  <swc-close-button size="s" data-action="unqueue" accessible-label="Remove from queue" @click=${() => model.agent.unqueue(this.#agent, message.id)}></swc-close-button>
28101
28653
  </li>`
28102
28654
  )}
@@ -28494,379 +29046,6 @@ var SliccMemory = class extends ModelElement {
28494
29046
  }
28495
29047
  };
28496
29048
 
28497
- // src/app/monitor.ts
28498
- function sparkline(points, width = 120, height = 28) {
28499
- if (points.length < 2) return "";
28500
- const max2 = Math.max(...points);
28501
- const min2 = Math.min(...points);
28502
- const span = max2 - min2 || 1;
28503
- return points.map(
28504
- (value, i26) => `${(i26 / (points.length - 1) * width).toFixed(1)},${(height - (value - min2) / span * (height - 2) - 1).toFixed(1)}`
28505
- ).join(" ");
28506
- }
28507
- function meterVariant2(ratio) {
28508
- if (ratio >= 0.9) return "negative";
28509
- if (ratio >= 0.6) return "notice";
28510
- return "informative";
28511
- }
28512
- var surfaces2 = {
28513
- agents: "agents",
28514
- terminals: "terminal",
28515
- tabs: "browser",
28516
- changes: "changes",
28517
- processes: "terminal"
28518
- };
28519
- var rowLights = {
28520
- active: "info",
28521
- idle: "neutral",
28522
- warn: "notice",
28523
- error: "negative"
28524
- };
28525
- var rowSpoken = {
28526
- active: "Active",
28527
- idle: "Idle",
28528
- warn: "Needs attention",
28529
- error: "Error"
28530
- };
28531
- function indent2(depth) {
28532
- return Math.min(Math.max(Math.floor(depth ?? 0), 0), 6);
28533
- }
28534
- function attention(section) {
28535
- const errors = section.rows.filter((row) => row.status === "error").length;
28536
- if (errors)
28537
- return { variant: "negative", text: `${errors} ${errors === 1 ? "error" : "errors"}` };
28538
- const warnings = section.rows.filter((row) => row.status === "warn").length;
28539
- if (warnings)
28540
- return {
28541
- variant: "notice",
28542
- text: `${warnings} ${warnings === 1 ? "needs" : "need"} attention`
28543
- };
28544
- return null;
28545
- }
28546
- var SliccMonitor = class extends ModelElement {
28547
- static properties = {
28548
- ...ModelElement.properties,
28549
- expanded: { state: true },
28550
- copied: { state: true }
28551
- };
28552
- constructor() {
28553
- super();
28554
- this.expanded = {};
28555
- this.copied = null;
28556
- }
28557
- static styles = [
28558
- shared,
28559
- panelCss,
28560
- i`
28561
- .bar {
28562
- padding-block: var(--swc-spacing-50);
28563
- }
28564
- .heading {
28565
- flex: 1;
28566
- min-width: 0;
28567
- display: flex;
28568
- flex-wrap: wrap;
28569
- align-items: baseline;
28570
- column-gap: var(--swc-spacing-100);
28571
- white-space: normal;
28572
- }
28573
- .bar swc-action-button {
28574
- flex: none;
28575
- }
28576
- .body {
28577
- flex: 1;
28578
- min-height: 0;
28579
- overflow-y: auto;
28580
- padding: var(--swc-spacing-100);
28581
- display: grid;
28582
- grid-template-columns: minmax(0, 1fr);
28583
- align-content: start;
28584
- gap: var(--swc-spacing-200);
28585
- }
28586
- .vitals {
28587
- display: grid;
28588
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--swc-card-default-width-extra-small)), 1fr));
28589
- gap: var(--swc-spacing-100);
28590
- }
28591
- .vital {
28592
- display: grid;
28593
- align-content: start;
28594
- gap: var(--swc-spacing-50);
28595
- border-radius: var(--swc-corner-radius-medium-default);
28596
- padding: var(--swc-spacing-200);
28597
- background: var(--swc-background-layer-1-color);
28598
- }
28599
- .label {
28600
- color: var(--swc-neutral-subdued-content-color-default);
28601
- font-size: var(--swc-font-size-75);
28602
- }
28603
- .value {
28604
- font-size: var(--swc-font-size-300);
28605
- font-weight: var(--swc-bold-font-weight);
28606
- font-variant-numeric: tabular-nums;
28607
- }
28608
- .unit,
28609
- .delta {
28610
- color: var(--swc-neutral-subdued-content-color-default);
28611
- margin-inline-start: var(--swc-spacing-75);
28612
- }
28613
- svg {
28614
- display: block;
28615
- width: 100%;
28616
- height: var(--swc-component-height-100);
28617
- }
28618
- polyline {
28619
- fill: none;
28620
- stroke: var(--swc-accent-visual-color);
28621
- stroke-width: 1.5;
28622
- }
28623
- swc-meter {
28624
- width: 100%;
28625
- }
28626
- .alerts {
28627
- display: grid;
28628
- gap: var(--swc-spacing-75);
28629
- margin: 0;
28630
- padding: 0;
28631
- list-style: none;
28632
- }
28633
- .alert {
28634
- display: grid;
28635
- grid-template-columns: auto minmax(0, 1fr);
28636
- gap: var(--swc-spacing-100);
28637
- align-items: start;
28638
- border-radius: var(--swc-corner-radius-medium-default);
28639
- padding: var(--swc-spacing-100) var(--swc-spacing-200);
28640
- background: var(--swc-notice-subtle-background-color-default);
28641
- }
28642
- .alert[data-severity='error'] {
28643
- background: var(--swc-negative-subtle-background-color-default);
28644
- }
28645
- .alert swc-icon-alert-triangle {
28646
- color: var(--swc-icon-color-notice);
28647
- }
28648
- .alert swc-icon-alert-diamond {
28649
- color: var(--swc-icon-color-negative);
28650
- }
28651
- .alert .detail {
28652
- display: block;
28653
- color: var(--swc-neutral-subdued-content-color-default);
28654
- }
28655
- .alert > div {
28656
- min-width: 0;
28657
- }
28658
- .alert .command {
28659
- display: flex;
28660
- align-items: center;
28661
- gap: var(--swc-spacing-100);
28662
- margin-block-start: var(--swc-spacing-75);
28663
- padding-inline-start: var(--swc-spacing-100);
28664
- border-radius: var(--swc-corner-radius-medium-default);
28665
- background: var(--swc-background-layer-1-color);
28666
- }
28667
- .alert code {
28668
- flex: 1;
28669
- min-width: 0;
28670
- overflow-x: auto;
28671
- white-space: nowrap;
28672
- font-family: var(--swc-code-font-family-stack);
28673
- font-size: var(--swc-font-size-75);
28674
- color: var(--swc-code-color);
28675
- }
28676
- .alert .lead {
28677
- display: block;
28678
- margin-block-start: var(--swc-spacing-75);
28679
- color: var(--swc-neutral-subdued-content-color-default);
28680
- }
28681
- .alert .uncopied {
28682
- display: block;
28683
- color: var(--swc-negative-content-color-default);
28684
- }
28685
- .sections {
28686
- display: grid;
28687
- margin: 0;
28688
- padding: 0;
28689
- list-style: none;
28690
- }
28691
- .section {
28692
- display: grid;
28693
- }
28694
- .line {
28695
- display: flex;
28696
- flex-wrap: wrap;
28697
- align-items: center;
28698
- gap: var(--swc-spacing-100);
28699
- min-height: var(--swc-component-height-100);
28700
- padding: var(--swc-spacing-50) 0;
28701
- }
28702
- .toggle {
28703
- all: unset;
28704
- box-sizing: border-box;
28705
- flex: 1 1 auto;
28706
- min-width: 0;
28707
- display: flex;
28708
- align-items: center;
28709
- gap: var(--swc-spacing-75);
28710
- cursor: pointer;
28711
- border-radius: var(--swc-corner-radius-small-default);
28712
- }
28713
- .toggle:focus-visible {
28714
- outline: var(--swc-focus-indicator-thickness) solid var(--swc-focus-indicator-color);
28715
- outline-offset: var(--swc-focus-ring-gap);
28716
- }
28717
- .chevron {
28718
- flex: none;
28719
- width: var(--swc-component-height-50);
28720
- display: inline-flex;
28721
- justify-content: center;
28722
- color: var(--swc-neutral-subdued-content-color-default);
28723
- }
28724
- .toggle[aria-expanded='true'] swc-icon-chevron-right {
28725
- transform: rotate(90deg);
28726
- }
28727
- :host(:dir(rtl)) .toggle[aria-expanded='false'] swc-icon-chevron-right {
28728
- transform: scaleX(-1);
28729
- }
28730
- .line .name {
28731
- flex: 1 1 auto;
28732
- min-width: 0;
28733
- }
28734
- .line .num {
28735
- font-weight: var(--swc-bold-font-weight);
28736
- font-variant-numeric: tabular-nums;
28737
- }
28738
- .rows {
28739
- display: grid;
28740
- gap: var(--swc-spacing-50);
28741
- margin: 0 0 var(--swc-spacing-100);
28742
- padding: 0;
28743
- padding-inline-start: calc(var(--swc-component-height-50) + var(--swc-spacing-75));
28744
- list-style: none;
28745
- }
28746
- .row {
28747
- display: grid;
28748
- grid-template-columns: minmax(0, 1fr) auto;
28749
- align-items: center;
28750
- column-gap: var(--swc-spacing-100);
28751
- padding-inline-start: calc(var(--depth, 0) * var(--swc-spacing-300));
28752
- }
28753
- .row swc-status-light {
28754
- min-width: 0;
28755
- overflow-wrap: break-word;
28756
- }
28757
- .row .badges {
28758
- grid-column: 2;
28759
- grid-row: 1 / span 2;
28760
- align-self: start;
28761
- display: flex;
28762
- flex-wrap: wrap;
28763
- justify-content: end;
28764
- gap: var(--swc-spacing-50);
28765
- }
28766
- .row swc-status-light {
28767
- grid-column: 1;
28768
- grid-row: 1;
28769
- }
28770
- .row .meta {
28771
- grid-column: 1;
28772
- grid-row: 2;
28773
- padding-inline-start: var(--swc-spacing-300);
28774
- color: var(--swc-neutral-subdued-content-color-default);
28775
- font-size: var(--swc-font-size-75);
28776
- overflow-wrap: break-word;
28777
- }
28778
- `
28779
- ];
28780
- subscribe(model) {
28781
- return [model.monitor.on("snapshot", () => this.requestUpdate())];
28782
- }
28783
- focus() {
28784
- this.focusOn(".bar swc-action-button");
28785
- }
28786
- #vital(vital) {
28787
- if (vital.ratio !== void 0) {
28788
- return b`<div class="vital" data-id=${vital.id}>
28789
- <swc-meter
28790
- size="s"
28791
- variant=${meterVariant2(vital.ratio)}
28792
- value=${Math.round(vital.ratio * 100)}
28793
- value-label=${vital.value}
28794
- ><span slot="label">${vital.label}</span>${vital.unit ? b`<span slot="description">${vital.unit}</span>` : A}</swc-meter
28795
- >
28796
- </div>`;
28797
- }
28798
- const line = vital.series ? sparkline(vital.series) : "";
28799
- return b`<div class="vital" data-id=${vital.id}>
28800
- <div class="label">${vital.label}</div>
28801
- <div><span class="value">${vital.value}</span>${vital.unit ? b`<span class="unit">${vital.unit}</span>` : A}${vital.delta ? b`<span class="delta">${vital.delta}</span>` : A}</div>
28802
- ${line ? b`<svg viewBox="0 0 120 28" preserveAspectRatio="none" aria-hidden="true">${w`<polyline points=${line}></polyline>`}</svg>` : A}
28803
- </div>`;
28804
- }
28805
- #alert(alert) {
28806
- const error = alert.severity === "error";
28807
- return b`<li class="alert" data-severity=${alert.severity}>
28808
- ${error ? b`<swc-icon-alert-diamond size="s" aria-hidden="true"></swc-icon-alert-diamond>` : b`<swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle>`}
28809
- <div><span class="sr">${error ? "Error: " : "Warning: "}</span><strong>${alert.title}</strong><span class="detail">${alert.detail}</span>${alert.command ? this.#command(alert.id, alert.command, alert.commandLabel ?? "Run") : A}</div>
28810
- </li>`;
28811
- }
28812
- #command(id, text2, label) {
28813
- const copied = this.copied?.id === id && this.copied.text === text2 ? this.copied : null;
28814
- return b`<span class="lead">${label}:</span><div class="command" data-command><code>${text2}</code><swc-action-button size="s" quiet data-action="copy-command" accessible-label=${copied?.done ? "Copied" : "Copy command"} @click=${() => this.#copy(id, text2)}><swc-icon-copy slot="icon"></swc-icon-copy>${copied?.done ? "Copied" : "Copy"}</swc-action-button></div>${copied && !copied.done ? b`<span class="uncopied" role="alert" data-error="copy">Couldn’t copy. Select the command and copy it.</span>` : A}`;
28815
- }
28816
- async #copy(id, text2) {
28817
- this.copied = { id, text: text2, done: await copyText(text2) };
28818
- }
28819
- #open(id) {
28820
- this.dispatchEvent(
28821
- new CustomEvent("show-surface", { detail: { id }, bubbles: true, composed: true })
28822
- );
28823
- }
28824
- #row(row) {
28825
- const depth = indent2(row.depth);
28826
- return b`<li class="row" data-id=${row.id ?? A} data-status=${row.status} data-depth=${depth || A} style=${depth ? `--depth: ${depth}` : A}>
28827
- <swc-status-light size="s" variant=${rowLights[row.status]}><span class="sr">${rowSpoken[row.status]}: </span>${row.name.split(/(?<=\/)/).map((part2, i26) => i26 ? b`<wbr>${part2}` : part2)}</swc-status-light>
28828
- <span class="badges">${(row.badges ?? []).map((badge) => b`<swc-badge size="s" variant="neutral" subtle>${badge}</swc-badge>`)}</span>
28829
- ${row.meta ? b`<span class="meta">${row.meta}</span>` : A}
28830
- </li>`;
28831
- }
28832
- #section(section) {
28833
- const flag = attention(section);
28834
- const surface2 = surfaces2[section.id];
28835
- const rows = section.rows.length > 0;
28836
- const open = rows && (this.expanded[section.id] ?? flag !== null);
28837
- const list5 = `rows-${section.id}`;
28838
- return b`<li class="section" data-id=${section.id} data-open=${open ? "" : A}>
28839
- <div class="line">
28840
- ${rows ? b`<button class="toggle" aria-expanded=${open ? "true" : "false"} aria-controls=${open ? list5 : A} @click=${() => {
28841
- this.expanded = { ...this.expanded, [section.id]: !open };
28842
- }}><span class="chevron"><swc-icon-chevron-right size="s" aria-hidden="true"></swc-icon-chevron-right></span><span class="name">${section.label}</span></button>` : b`<span class="chevron"></span><span class="name">${section.label}</span>`}
28843
- ${flag ? b`<swc-badge size="s" variant=${flag.variant} subtle>${flag.text}</swc-badge>` : A}
28844
- <span class="num">${section.rows.length}</span>
28845
- ${surface2 ? b`<swc-action-button size="s" quiet accessible-label=${`Open ${section.label}`} @click=${() => this.#open(surface2)}
28846
- >Open</swc-action-button
28847
- >` : A}
28848
- </div>
28849
- ${open ? b`<ul class="rows" id=${list5} aria-label=${section.label}>${c(
28850
- section.rows,
28851
- (row, i26) => row.id ?? i26,
28852
- (row) => this.#row(row)
28853
- )}</ul>` : A}
28854
- </li>`;
28855
- }
28856
- render() {
28857
- const snapshot2 = this.model?.monitor.snapshot();
28858
- return b`<div class="bar">
28859
- <span class="heading"><strong>Live monitor</strong><span>${snapshot2 ? `Updated ${new Date(snapshot2.updatedAt).toISOString().slice(11, 19)} UTC` : "No data"}</span></span>
28860
- <swc-action-button size="s" quiet @click=${() => this.model?.monitor.resync()}><swc-icon-refresh slot="icon"></swc-icon-refresh>Re-sync</swc-action-button>
28861
- </div>
28862
- <div class="body">
28863
- ${snapshot2 ? b`<div class="vitals">${snapshot2.vitals.map((vital) => this.#vital(vital))}</div>
28864
- ${snapshot2.alerts.length ? b`<ul class="alerts" aria-label="Alerts">${snapshot2.alerts.map((alert) => this.#alert(alert))}</ul>` : A}
28865
- <ul class="sections" aria-label="Activity">${snapshot2.sections.map((section) => this.#section(section))}</ul>` : A}
28866
- </div>`;
28867
- }
28868
- };
28869
-
28870
29049
  // src/app/notices.ts
28871
29050
  var SliccNotices = class extends ModelElement {
28872
29051
  static properties = {
@@ -29131,8 +29310,8 @@ function revealed(name, entries, now = Date.now(), more = false) {
29131
29310
  const start = startOfDay(now);
29132
29311
  const today = reveals.filter((entry) => entry.at >= start).length;
29133
29312
  const partial = more && (entries[entries.length - 1]?.at ?? 0) >= start;
29134
- const when = today ? `${partial ? "at least " : ""}${today} ${today === 1 ? "time" : "times"} today` : since(last.at, now);
29135
- return b`Revealed to programs ${when}, last by ${who(last)} with <code>${last.argv}</code>`;
29313
+ const when2 = today ? `${partial ? "at least " : ""}${today} ${today === 1 ? "time" : "times"} today` : since(last.at, now);
29314
+ return b`Revealed to programs ${when2}, last by ${who(last)} with <code>${last.argv}</code>`;
29136
29315
  }
29137
29316
  function changes(entry, devices) {
29138
29317
  if (entry.changes)
@@ -29193,8 +29372,8 @@ var importKinds = {
29193
29372
  };
29194
29373
  function exported(at) {
29195
29374
  if (at === void 0) return A;
29196
- const when = at === null ? "Never exported" : `Last exported ${new Intl.DateTimeFormat(void 0, { dateStyle: "medium" }).format(at)}`;
29197
- return b`<span class="muted" data-exported>${when}</span>`;
29375
+ const when2 = at === null ? "Never exported" : `Last exported ${new Intl.DateTimeFormat(void 0, { dateStyle: "medium" }).format(at)}`;
29376
+ return b`<span class="muted" data-exported>${when2}</span>`;
29198
29377
  }
29199
29378
  function prompt2(text2) {
29200
29379
  return text2.length > 200 ? `${text2.slice(0, 199)}\u2026` : text2;
@@ -43113,8 +43292,8 @@ var SecondPassVisitor = {
43113
43292
  openRefs,
43114
43293
  reffedNodesByReferencer
43115
43294
  }) {
43116
- const origin = groupOriginByCopy.get(node);
43117
- if (origin && openRefs.has(node.number)) {
43295
+ const origin2 = groupOriginByCopy.get(node);
43296
+ if (origin2 && openRefs.has(node.number)) {
43118
43297
  const recursion2 = setParent(createRecursion(node.number), parent);
43119
43298
  reffedNodesByReferencer.set(recursion2, openRefs.get(node.number));
43120
43299
  replaceWith(recursion2);
@@ -43131,7 +43310,7 @@ var SecondPassVisitor = {
43131
43310
  if (
43132
43311
  // This group is from subroutine expansion, and there's a multiplex value from either the
43133
43312
  // origin node or a prior subroutine expansion group with the same origin
43134
- origin === multiplex.node || origin && origin === multiplex.origin || // This group is not from subroutine expansion, and it comes after a subroutine expansion
43313
+ origin2 === multiplex.node || origin2 && origin2 === multiplex.origin || // This group is not from subroutine expansion, and it comes after a subroutine expansion
43135
43314
  // group that refers to this group
43136
43315
  node === multiplex.origin
43137
43316
  ) {
@@ -43139,14 +43318,14 @@ var SecondPassVisitor = {
43139
43318
  break;
43140
43319
  }
43141
43320
  }
43142
- multiplexCapturesToLeftByRef.get(node.number).push({ node, origin });
43321
+ multiplexCapturesToLeftByRef.get(node.number).push({ node, origin: origin2 });
43143
43322
  if (node.name) {
43144
- multiplexCapturesToLeftByRef.get(node.name).push({ node, origin });
43323
+ multiplexCapturesToLeftByRef.get(node.name).push({ node, origin: origin2 });
43145
43324
  }
43146
43325
  if (node.name) {
43147
43326
  const groupsWithSameName = getOrInsert(groupsByName, node.name, /* @__PURE__ */ new Map());
43148
43327
  let hasDuplicateNameToRemove = false;
43149
- if (origin) {
43328
+ if (origin2) {
43150
43329
  hasDuplicateNameToRemove = true;
43151
43330
  } else {
43152
43331
  for (const groupInfo of groupsWithSameName.values()) {
@@ -43618,11 +43797,11 @@ var generator = {
43618
43797
  CapturingGroup(node, state3, gen) {
43619
43798
  const { body: body4, name, number: number2 } = node;
43620
43799
  const data = { ignoreCase: state3.currentFlags.ignoreCase };
43621
- const origin = state3.originMap.get(node);
43622
- if (origin) {
43800
+ const origin2 = state3.originMap.get(node);
43801
+ if (origin2) {
43623
43802
  data.hidden = true;
43624
- if (number2 > origin.number) {
43625
- data.transferTo = origin.number;
43803
+ if (number2 > origin2.number) {
43804
+ data.transferTo = origin2.number;
43626
43805
  }
43627
43806
  }
43628
43807
  state3.captureMap.set(number2, data);
@@ -70542,13 +70721,13 @@ var DockviewComponent = class extends BaseGrid {
70542
70721
  /** ISmartGuidesHost: the main grid's splitter (sash) rectangles, in the
70543
70722
  * floating container's coordinate space, for the optional splitter target. */
70544
70723
  getGridSplitterRects() {
70545
- const origin = this.getFloatingContainer().getBoundingClientRect();
70724
+ const origin2 = this.getFloatingContainer().getBoundingClientRect();
70546
70725
  const result = [];
70547
70726
  this.gridview.element.querySelectorAll(".dv-sash").forEach((sash) => {
70548
70727
  const r40 = sash.getBoundingClientRect();
70549
70728
  result.push({
70550
- left: r40.left - origin.left,
70551
- top: r40.top - origin.top,
70729
+ left: r40.left - origin2.left,
70730
+ top: r40.top - origin2.top,
70552
70731
  width: r40.width,
70553
70732
  height: r40.height
70554
70733
  });
@@ -72775,10 +72954,10 @@ var DockviewComponent = class extends BaseGrid {
72775
72954
  * therefore report as one, tagged with the kind of the last to finish.
72776
72955
  */
72777
72956
  openMutation(kind) {
72778
- const origin = this._origin;
72957
+ const origin2 = this._origin;
72779
72958
  if (this._mutationDepth === 0) this._onWillMutateLayout.fire({
72780
72959
  kind,
72781
- origin
72960
+ origin: origin2
72782
72961
  });
72783
72962
  this._mutationDepth++;
72784
72963
  return () => {
@@ -72788,7 +72967,7 @@ var DockviewComponent = class extends BaseGrid {
72788
72967
  this.flushLocationChanges();
72789
72968
  this._onDidMutateLayout.fire({
72790
72969
  kind,
72791
- origin
72970
+ origin: origin2
72792
72971
  });
72793
72972
  }
72794
72973
  };
@@ -72852,10 +73031,10 @@ var DockviewComponent = class extends BaseGrid {
72852
73031
  * call made while a mutation is already in flight) keeps whatever the
72853
73032
  * enclosing operation established, so the trigger always wins.
72854
73033
  */
72855
- withOrigin(origin, func) {
73034
+ withOrigin(origin2, func) {
72856
73035
  if (this._originDepth > 0 || this._mutationDepth > 0) return func();
72857
73036
  const previous = this._origin;
72858
- this._origin = origin;
73037
+ this._origin = origin2;
72859
73038
  this._originDepth++;
72860
73039
  try {
72861
73040
  return func();
@@ -83018,8 +83197,9 @@ export {
83018
83197
  panelCommand,
83019
83198
  prompt,
83020
83199
  resolveColor,
83200
+ secretRules,
83021
83201
  setGrammarBase,
83022
- surfaces
83202
+ surfaces2 as surfaces
83023
83203
  };
83024
83204
  /*! Bundled license information:
83025
83205