@ai-ecoverse/slicc-spectrum 1.86.5 → 1.86.7
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 +6 -1
- package/dist/slicc-dummy.js +6 -3
- package/dist/slicc-dummy.js.map +2 -2
- package/dist/slicc-ui.js +337 -35
- package/dist/slicc-ui.js.map +3 -3
- package/dist/types/app/view-state.d.ts +11 -0
- package/dist/types/components/file-tree.d.ts +11 -2
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -228,6 +228,7 @@ The sans stack (`--swc-sans-font-family-stack`, also used by the 1.12 components
|
|
|
228
228
|
The shell: header with the agent picker, status items, the update status, the network indicator, the tray, the View menu and the theme switch, rails, and a `<slicc-dock>`.
|
|
229
229
|
Saves the dock layout per screen class to `storage` (default `localStorage`) under `layoutKey`.
|
|
230
230
|
The dock builds new panel content whenever it lays panels out again (a switch between phone, tablet and desktop, or a layout reset), so what the user opens in a panel (sections, cones, rows, folders, disclosures) lives outside the element, per model and panel (`view-state.ts`, in memory only): a rebuilt panel shows it again, and a click on the outgoing panel while the new one mounts reaches the new one too.
|
|
231
|
+
Files keeps its selected row, its keyboard focus target (without taking focus) and its scroll the same way, and Agents, Memory, Changes, Monitor, the Browser tab cards, Freezer and Settings keep their scroll; the chat log keeps its own. The scroll comes back once the list has laid out, anchored on the selected row when it was in view and otherwise on the first row in view, at the same distance from the top, so a narrower phone layout keeps those rows in view. A list scrolled to its end, Files included, comes back at its end. Files puts its scroll back even when the tree scrolls its focused row into view on its own. After that, a resize or new content keeps the anchored row where it was. These lists set `overflow-anchor: none` on their scroller, since they anchor it themselves. When the app switches models in place, each panel shows the state it keeps for the new model.
|
|
231
232
|
While connected it sets `overscroll-behavior` to `none !important` on the page's `html` and `body`, so only scroll areas inside panels rubber-band.
|
|
232
233
|
It sets the page's `color-scheme` to its resolved theme, and when the page has a `theme-color` meta per `prefers-color-scheme`, gives every one of them the content of the meta for that theme, so the page and the installed app's title bar follow the app's setting instead of the OS.
|
|
233
234
|
When the last app on the page is removed, the page's own inline values and `theme-color` contents come back.
|
|
@@ -481,6 +482,7 @@ A live row offers **Open**, which selects that agent; a stopped one offers **Tha
|
|
|
481
482
|
A thawed scoop or agent run keeps its row, which says what it was thawed as.
|
|
482
483
|
**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.
|
|
483
484
|
Either way its conversation stays here, and a row without a `kind` counts as a cone.
|
|
485
|
+
A title longer than two lines ends in an ellipsis and carries its full text as a `title`; the dummy's titles are the whole first line of the first message, so only the card cuts them.
|
|
484
486
|
|
|
485
487
|
#### `<slicc-sprinkle>`
|
|
486
488
|
|
|
@@ -543,10 +545,13 @@ Not for direct use.
|
|
|
543
545
|
#### `<slicc-file-tree>`
|
|
544
546
|
|
|
545
547
|
Generic.
|
|
546
|
-
[`@pierre/trees`](https://www.npmjs.com/package/@pierre/trees) through its `web-components` entry: `paths` (folders end in `/`), `gitStatus`, `expanded`, `query` (shows only the paths that match it; empty shows all), `reveal(path, focus)`.
|
|
548
|
+
[`@pierre/trees`](https://www.npmjs.com/package/@pierre/trees) through its `web-components` entry: `paths` (folders end in `/`), `gitStatus`, `expanded`, `query` (shows only the paths that match it; empty shows all), `reveal(path, focus, options)`.
|
|
547
549
|
`expanded` also opens and closes the folders of a mounted tree, a `tree-expand` event (`detail.expanded`) reports the open folders when the user changes them, and the tree keeps them when it's moved, such as into a floating group.
|
|
548
550
|
It has no search field of its own.
|
|
549
551
|
A folder name or flattened folder chain too long for the row ends in an ellipsis instead of losing its middle, and every row carries its full name as a `title`, with its indent and chevron kept.
|
|
552
|
+
A file name too long for the row ends its name in an ellipsis and keeps its extension, as in "tide-summary… md": the library splits the name after the dot, and the browser's ellipsis drops whole letters, so the dot goes with the name and a sliver of space can stay before the extension.
|
|
553
|
+
`@pierre/trees` middle-truncates names by laying an "…" marker over the text, painted with `--trees-bg`; with the transparent background the tree uses here, the letters showed through it, so the tree hides that marker and lets the browser's own `text-overflow: ellipsis` cut the name before the extension.
|
|
554
|
+
A row's focus ring shows only with keyboard focus: the library draws it on the row that holds focus (`data-item-focused`), mouse click or not, so the tree hides it when the row isn't `:focus-visible`, and `focus(options)` passes `focusVisible` down to the row. Under forced colors, where the selection fill drops out, a selected row keeps a `Highlight` outline.
|
|
550
555
|
Fires `file-open` on click and on <kbd>Enter</kbd>, and `tree-search` (`detail.key`) when a letter or digit is typed in it, for the panel's search field.
|
|
551
556
|
|
|
552
557
|
#### `<slicc-code-view>`
|
package/dist/slicc-dummy.js
CHANGED
|
@@ -2807,6 +2807,9 @@ function script(prompt, attachments = []) {
|
|
|
2807
2807
|
}
|
|
2808
2808
|
|
|
2809
2809
|
// src/dummy/agent.ts
|
|
2810
|
+
function firstLine(text) {
|
|
2811
|
+
return text.split("\n")[0];
|
|
2812
|
+
}
|
|
2810
2813
|
var paced = /* @__PURE__ */ new Map([["cone-kitchen", 2e4]]);
|
|
2811
2814
|
function chunks(text) {
|
|
2812
2815
|
return text.match(/\S+\s*|\s+/g) ?? [];
|
|
@@ -3176,7 +3179,7 @@ var DummyAgent = class extends Emitter {
|
|
|
3176
3179
|
id,
|
|
3177
3180
|
kind: "cone",
|
|
3178
3181
|
name: agent.name,
|
|
3179
|
-
title: first?.role === "user" ? first.text
|
|
3182
|
+
title: first?.role === "user" ? firstLine(first.text) : agent.name,
|
|
3180
3183
|
model: agent.model,
|
|
3181
3184
|
messages: messages.length,
|
|
3182
3185
|
frozenAt: Date.now()
|
|
@@ -3303,7 +3306,7 @@ var DummyAgent = class extends Emitter {
|
|
|
3303
3306
|
kind: agent.kind,
|
|
3304
3307
|
live: true,
|
|
3305
3308
|
name: agent.name,
|
|
3306
|
-
title: first?.role === "user" ? first.text
|
|
3309
|
+
title: first?.role === "user" ? firstLine(first.text) : agent.name,
|
|
3307
3310
|
model: agent.model,
|
|
3308
3311
|
messages: messages.length,
|
|
3309
3312
|
frozenAt: messages.at(-1)?.createdAt ?? 0
|
|
@@ -3324,7 +3327,7 @@ var DummyAgent = class extends Emitter {
|
|
|
3324
3327
|
id: agentId,
|
|
3325
3328
|
kind: "cone",
|
|
3326
3329
|
name: agent.name,
|
|
3327
|
-
title: first?.role === "user" ? first.text
|
|
3330
|
+
title: first?.role === "user" ? firstLine(first.text) : agent.name,
|
|
3328
3331
|
model: agent.model,
|
|
3329
3332
|
messages: messages.length,
|
|
3330
3333
|
frozenAt: Date.now()
|