@ai-ecoverse/slicc-spectrum 1.108.2 → 1.108.3

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 CHANGED
@@ -912,7 +912,7 @@ Later backed by: BIOS.
912
912
  `list()` returns `Notice`s for quiet, dismissible in-line notices at the top of every chat panel, above the transcript, in list order: `id`, `tone` (`info` reads as informative, `warning` as a notice), `title`, a plain-text `body` and `actions` (`{ id, label }`).
913
913
  Title, body and labels are text only.
914
914
  Notices use `role="status"` and never take focus.
915
- An action is a secondary button that stays pending until `act(id, action)` settles; a rejection shows its message under the body.
915
+ An action is a secondary button that stays pending until `act(id, action)` settles; a rejection shows its message under the body (`[data-error]`), in the notice's text colour after a warning icon in the notice's tone.
916
916
  The close button, labelled "Dismiss: <title>", hides the notice at once and calls `dismiss(id)` synchronously; it shows again only if the port drops the notice from `list()` and brings it back later.
917
917
  Emit `notices` whenever they change.
918
918
  A notice with `dismissible: false` has no close button and stays until the port drops it.
@@ -1037,7 +1037,7 @@ New join URL changes the URL, and `model.network.setLinks()` switches scenarios.
1037
1037
  `guestsFixtures`, `guestsPolicy`, `guestsUnavailable`, `guestsRefused` and `DummyGuests` are exported from `/dummy`.
1038
1038
  `createDummyModel({ changes: 'files' | 'git' | 'nogit' })` (or `?changes=` on `/ui/`, default `files`) adds a git `changes` port: `git` lists the pending changes under `/workspace/harbor` and `/workspace/skills` with their `repo` and no author, and `nogit` reports git as unavailable.
1039
1039
  `DummyChanges` is exported from `/dummy`.
1040
- `createDummyModel({ notices: 'storage' | 'mixed' | 'fail' | 'off' })` (or `?notices=` on `/ui/`, off by default) adds an invented storage warning with Try again, which clears it after a short wait (`mixed` adds an informative notice without actions, and `fail` makes Try again fail).
1040
+ `createDummyModel({ notices: 'storage' | 'mixed' | 'fail' | 'off' })` (or `?notices=` on `/ui/`, off by default) adds an invented storage warning with Try again, which clears it after a short wait (`mixed` adds an informative notice without actions, and `fail` adds an informative backup notice with Download and makes both actions fail).
1041
1041
  `noticeFixtures` and `DummyNotices` are exported from `/dummy`.
1042
1042
  `createDummyModel({ browser: 'idle' | 'driving' | 'off' })` (or `?browser=` on `/ui/`, default `idle`) sets the dummy browser: `idle` has a history of invented actions (about 180 on harbor's tab, enough for Show more) and no driven tab, `driving` has harbor and quiet-otter driving two tabs, with harbor's last click still running and frames every 500 ms while watched, and `off` has no tabs.
1043
1043
  Stopping an agent releases its tabs.
@@ -4794,6 +4794,13 @@ var noticeFixtures = {
4794
4794
  body: "Seven keeps your files and chats on this computer. Nothing is uploaded unless you send it.",
4795
4795
  actions: []
4796
4796
  },
4797
+ backup: {
4798
+ id: "backup",
4799
+ tone: "info",
4800
+ title: "A backup of your chats is ready",
4801
+ body: "Seven saved a copy of your files and chats. Download it to keep one outside this browser.",
4802
+ actions: [{ id: "download", label: "Download" }]
4803
+ },
4797
4804
  readonly: {
4798
4805
  id: "readonly",
4799
4806
  tone: "warning",
@@ -4819,7 +4826,7 @@ var DummyNotices = class extends Emitter {
4819
4826
  super();
4820
4827
  this.#scenario = scenario;
4821
4828
  this.#time = time;
4822
- this.#notices = scenario === "mixed" ? [noticeFixtures.storage, noticeFixtures.welcome] : scenario === "readonly" || scenario === "starting" ? [noticeFixtures[scenario]] : [noticeFixtures.storage];
4829
+ this.#notices = scenario === "mixed" ? [noticeFixtures.storage, noticeFixtures.welcome] : scenario === "readonly" || scenario === "starting" ? [noticeFixtures[scenario]] : scenario === "fail" ? [noticeFixtures.storage, noticeFixtures.backup] : [noticeFixtures.storage];
4823
4830
  }
4824
4831
  list() {
4825
4832
  return this.#notices;
@@ -4827,7 +4834,9 @@ var DummyNotices = class extends Emitter {
4827
4834
  async act(id, action) {
4828
4835
  await this.#time.sleep(10);
4829
4836
  if (this.#scenario === "fail") {
4830
- throw new Error("The browser declined again. Bookmark this page, then try again.");
4837
+ throw new Error(
4838
+ id === "backup" ? "The browser blocked the download. Allow downloads for this page, then try again." : "The browser declined again. Bookmark this page, then try again."
4839
+ );
4831
4840
  }
4832
4841
  if (id === "storage" && action === "retry") this.#remove(id);
4833
4842
  }