@ai-ecoverse/slicc-spectrum 1.49.1 → 1.49.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/slicc-ui.js +8 -5
- package/dist/slicc-ui.js.map +2 -2
- package/dist/types/app/network.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -149,7 +149,7 @@ Text is Adobe Clean Spectrum VF, falling back to Adobe Clean, and code is Spectr
|
|
|
149
149
|
| `<slicc-monitor>` | The live monitor: vitals with sparklines (active agents, spend, budget, fullest context), alerts, and the topology (cones and scoops, terminals, tabs, pending changes, sprinkles, tray followers). |
|
|
150
150
|
| `<slicc-freezer>` | Every conversation in the session, from `frozen()`: cones, scoops and agent runs, each with a kind badge, live ones first with a Live light, then the newest first. A live row offers **Open**, which selects that agent; a stopped one offers **Thaw** and **Remove**, which deletes its working folders after a confirmation. A thawed scoop or agent run keeps its row, which says what it was thawed as. **Delete cone**, in the agents list (or <kbd>Delete</kbd> on a cone's row) and the header's cone picker, stops a cone after a confirmation; `/freeze` does it at once. Either way its conversation stays here, and a row without a `kind` counts as a cone. |
|
|
151
151
|
| `<slicc-sprinkle>` | A SLICC sprinkle (`.shtml`), as a panel or, with `inline`, as a dip in the chat that grows to fit. A dip has a tab-like handle: drag it into the dock (or onto a rail, or use its open-as-panel button) and it lives on as a sprinkle panel, with a note in the chat where it was; which dips are out is saved in `slicc-ui.dips`. It runs in a sandboxed frame (`allow-scripts` only) with SLICC's sprinkle theme (the `--s2-*` tokens and `.sprinkle-*` classes), the app's fonts, and Lucide icons (`<i data-lucide>`, `LucideIcons.render()`). It talks back through `slicc.lick({ action, data })`, which reaches the owning cone as a `sprinkle` lick, and, when the port has `call`, reads files and keeps state (see [Sprinkle bridge](#sprinkle-bridge)). Panel sprinkles sit at the top of the right rail with their Lucide icon. |
|
|
152
|
-
| `<slicc-network>` | Network: the route and its health in plain words with the bios `detail`, a line on browser automation (`data-browser`: through the SLICC extension, through slicc-node, through a linked device's browser, or not available with how to get it) when the status has `browser`, **Check again** (`data-action="check"`) when the port has `check`, an **Internet traffic** picker (`data-action="exit"`, in `[data-exit-picker]` with the exit's kind) when the port has `setExit`, the route line saying where traffic goes, and under the picker a warning that traffic waits while the chosen device isn't connected (`data-exit="device"`, `data-held`, with **Send directly**, `data-action="exit-direct"`, which calls `setExit(null)`) or, when `route` isn't `tailnet`, the Tailscale exit node in use (`data-exit="node"`), a **Tailscale** section (`data-tailnet` with the state) when the status has `tailnet`, a **Linked devices** section (`data-links`: `linked`, `connecting`, `reconnecting`, `offline`, `none` or `permission`; each device row has a **Prompting** or **Watching** badge, `data-controlling`, while it controls the agent, and **Allow remote control**, `sp-switch[data-action="remote-control"]`, behind a confirm when turned on, or `data-control="fixed"` for a device on this computer) when the status has `links`, **Get the whole web** with the Chrome extension link (`data-action="install-extension"`, when `extensionUrl` is set) and `npx @ai-ecoverse/slicc-node` with a copy button (`data-action="copy-command"`), folded away when the route already reaches the whole web (`proxy`, `extension` or `tailnet`, whose line names `tailnet.exitNode`) or a linked device is the exit (`exit.kind` `link`: the route line names the device and its `policy`, or says it's waiting for it, and `data-route` is `link`, whatever `route` says), and recent failures with host, error and time. The header's **Network** indicator (`data-network`, `data-health`) opens it: a status light, green for `ok`, yellow for `limited` and red for `failing`, with the state in its text and label and `detail` as its tooltip, which adds "Tailscale is connected." while the tailnet runs; on a phone, a cloud icon for the state. While a linked device controls the agent,
|
|
152
|
+
| `<slicc-network>` | Network: the route and its health in plain words with the bios `detail`, a line on browser automation (`data-browser`: through the SLICC extension, through slicc-node, through a linked device's browser, that slicc-node has no browser attached when `route` is `proxy` and `via` is `null`, or not available with how to get it) when the status has `browser`, **Check again** (`data-action="check"`) when the port has `check`, an **Internet traffic** picker (`data-action="exit"`, in `[data-exit-picker]` with the exit's kind) when the port has `setExit`, the route line saying where traffic goes, and under the picker a warning that traffic waits while the chosen device isn't connected (`data-exit="device"`, `data-held`, with **Send directly**, `data-action="exit-direct"`, which calls `setExit(null)`) or, when `route` isn't `tailnet`, the Tailscale exit node in use (`data-exit="node"`), a **Tailscale** section (`data-tailnet` with the state) when the status has `tailnet`, a **Linked devices** section (`data-links`: `linked`, `connecting`, `reconnecting`, `offline`, `none` or `permission`; each device row has a **Prompting** or **Watching** badge, `data-controlling`, while it controls the agent, and **Allow remote control**, `sp-switch[data-action="remote-control"]`, behind a confirm when turned on, or `data-control="fixed"` for a device on this computer) when the status has `links`, **Get the whole web** with the Chrome extension link (`data-action="install-extension"`, when `extensionUrl` is set) and `npx @ai-ecoverse/slicc-node` with a copy button (`data-action="copy-command"`), folded away when the route already reaches the whole web (`proxy`, `extension` or `tailnet`, whose line names `tailnet.exitNode`) or a linked device is the exit (`exit.kind` `link`: the route line names the device and its `policy`, or says it's waiting for it, and `data-route` is `link`, whatever `route` says), and recent failures with host, error and time. The header's **Network** indicator (`data-network`, `data-health`) opens it: a status light, green for `ok`, yellow for `limited` and red for `failing`, with the state in its text and label and `detail` as its tooltip, which adds "Tailscale is connected." while the tailnet runs; on a phone, a cloud icon for the state. While a linked device controls the agent, an indicator (`data-remote`, `prompt` or `watch`) sits before it, **Controlled by** or **Watched by** the device's name (or the number of devices; prompting wins), says who does what in its tooltip and opens the panel too. Offered only when the model has a `network` port. |
|
|
153
153
|
| `<slicc-tray>` | The tray indicator in the header: connection, the float's name, followers and budget; its panel adds role, runtime, spend, the follower list, the join link, and disconnect or reconnect. |
|
|
154
154
|
| `<slicc-confirm>` | The confirmation dialog `confirm()` opens. Not for direct use. |
|
|
155
155
|
| `<slicc-prompt>` | The name dialog `prompt()` opens. Not for direct use. |
|
package/dist/slicc-ui.js
CHANGED
|
@@ -10868,8 +10868,10 @@ var automation = {
|
|
|
10868
10868
|
function automationOf(browser) {
|
|
10869
10869
|
return browser.via ?? "none";
|
|
10870
10870
|
}
|
|
10871
|
-
function browserLine(browser, links) {
|
|
10871
|
+
function browserLine(browser, links, route) {
|
|
10872
10872
|
const via = automationOf(browser);
|
|
10873
|
+
if (via === "none" && route === "proxy")
|
|
10874
|
+
return "Browser automation: slicc-node has no browser attached.";
|
|
10873
10875
|
if (via !== "link") return automation[via];
|
|
10874
10876
|
const connected = (links?.devices ?? []).filter((device) => device.state === "connected");
|
|
10875
10877
|
const found = connected.flatMap(
|
|
@@ -10924,8 +10926,9 @@ function remoteLight(status2) {
|
|
|
10924
10926
|
return [`${devices.length} linked devices are ${verb} the agent.`];
|
|
10925
10927
|
};
|
|
10926
10928
|
const tooltip = [...say(prompting, "sending prompts to"), ...say(watching, "watching")].join(" ");
|
|
10927
|
-
|
|
10928
|
-
return { mode: "
|
|
10929
|
+
const by = (devices) => devices.length === 1 ? devices[0].name : `${devices.length} linked devices`;
|
|
10930
|
+
if (prompting.length) return { mode: "prompt", text: `Controlled by ${by(prompting)}`, tooltip };
|
|
10931
|
+
return { mode: "watch", text: `Watched by ${by(watching)}`, tooltip };
|
|
10929
10932
|
}
|
|
10930
10933
|
function linksSummary(links) {
|
|
10931
10934
|
if (links.permission) return "permission";
|
|
@@ -11577,7 +11580,7 @@ var SliccNetwork = class extends ModelElement {
|
|
|
11577
11580
|
<p data-route=${routeOf(status2) ?? "none"}>${routeLine(status2)}</p>
|
|
11578
11581
|
${status2.detail ? b`<p class="detail">${status2.detail}</p>` : A}
|
|
11579
11582
|
${this.#exitPicker(port, status2)}
|
|
11580
|
-
${status2.browser ? b`<p data-browser=${automationOf(status2.browser)}>${browserLine(status2.browser, status2.links)}${status2.browser.detail ? b` <span class="detail">${status2.browser.detail}</span>` : A}</p>` : A}
|
|
11583
|
+
${status2.browser ? b`<p data-browser=${automationOf(status2.browser)}>${browserLine(status2.browser, status2.links, status2.route)}${status2.browser.detail ? b` <span class="detail">${status2.browser.detail}</span>` : A}</p>` : A}
|
|
11581
11584
|
${port.check ? b`<div class="actions"><swc-button size="m" variant="secondary" data-action="check" ?pending=${this.checking} @click=${() => this.check()}>Check again</swc-button></div>` : A}
|
|
11582
11585
|
${this.error ? b`<div class="error" role="alert"><swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle><span>${this.error}</span></div>` : A}
|
|
11583
11586
|
</section>`;
|
|
@@ -20891,7 +20894,7 @@ var SliccApp = class extends ThemedElement {
|
|
|
20891
20894
|
if (!port || !this.#offers("network")) return A;
|
|
20892
20895
|
const light = remoteLight(port.status());
|
|
20893
20896
|
if (!light) return A;
|
|
20894
|
-
return b`<swc-action-button id="remote" quiet size="s" data-remote=${light.mode} accessible-label=${
|
|
20897
|
+
return b`<swc-action-button id="remote" quiet size="s" data-remote=${light.mode} accessible-label=${light.tooltip} @click=${() => this.show("network")}>
|
|
20895
20898
|
<swc-status-light size="s" variant="info">${this.screen === "phone" ? A : light.text}</swc-status-light>
|
|
20896
20899
|
</swc-action-button>
|
|
20897
20900
|
<swc-tooltip for="remote" placement="bottom">${light.tooltip}</swc-tooltip>`;
|