@frockbot/plugin-fly-sprite 0.3.19 → 0.3.21

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frockbot/plugin-fly-sprite",
3
- "version": "0.3.19",
3
+ "version": "0.3.21",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -25,16 +25,16 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@cordisjs/plugin-webui": "0.8.2",
28
- "@frockbot/computer-core": "0.3.19",
29
- "@frockbot/computer-host-protocol": "0.3.19",
30
- "@frockbot/computer-host-runtime": "0.3.19",
31
- "@frockbot/kernel-contracts": "0.3.19",
32
- "@frockbot/plugin-computer": "0.3.19",
28
+ "@frockbot/computer-core": "0.3.21",
29
+ "@frockbot/computer-host-protocol": "0.3.21",
30
+ "@frockbot/computer-host-runtime": "0.3.21",
31
+ "@frockbot/kernel-contracts": "0.3.21",
32
+ "@frockbot/plugin-computer": "0.3.21",
33
33
  "cordis": "4.0.0-rc.8"
34
34
  },
35
35
  "devDependencies": {
36
- "@frockbot/plugin-testkit": "0.3.19",
37
- "@frockbot/workspace-store": "0.3.19",
36
+ "@frockbot/plugin-testkit": "0.3.21",
37
+ "@frockbot/workspace-store": "0.3.21",
38
38
  "@types/bun": "1.4.0",
39
39
  "@types/node": "26.2.0",
40
40
  "typescript": "^7.0.2"
package/src/computer.ts CHANGED
@@ -185,8 +185,16 @@ export interface FlySpriteComputerOptions {
185
185
  }
186
186
 
187
187
  export interface BrowserAction {
188
- action: "snapshot" | "navigate" | "click" | "fill" | "press" | "wait";
188
+ action:
189
+ | "snapshot"
190
+ | "navigate"
191
+ | "close-origins"
192
+ | "click"
193
+ | "fill"
194
+ | "press"
195
+ | "wait";
189
196
  url?: string;
197
+ origins?: readonly string[];
190
198
  role?: string;
191
199
  name?: string;
192
200
  label?: string;
@@ -22,10 +22,20 @@ function report(generation: number): string {
22
22
  generation,
23
23
  capturedAt: "2026-09-01T00:00:00Z",
24
24
  checks: [
25
+ {
26
+ name: "watchdog",
27
+ status: "pass",
28
+ detail: "recent actions: none",
29
+ },
30
+ {
31
+ name: "memory-top",
32
+ status: "pass",
33
+ detail: "123 2048 chromium",
34
+ },
25
35
  { name: "disk-root", status: "pass", detail: "12% full" },
26
36
  { name: "dns", status: "fail", detail: "no resolver" },
27
37
  ],
28
- summary: "2 checks, 1 passed, 1 failed",
38
+ summary: "4 checks, 3 passed, 1 failed",
29
39
  })}\n`;
30
40
  }
31
41
 
@@ -52,8 +62,10 @@ describe("doctorForAgent", () => {
52
62
 
53
63
  const decoded = await bot.doctor(signal());
54
64
 
55
- expect(decoded.summary).toBe("2 checks, 1 passed, 1 failed");
65
+ expect(decoded.summary).toBe("4 checks, 3 passed, 1 failed");
56
66
  expect(decoded.checks.map((check) => check.status)).toEqual([
67
+ "pass",
68
+ "pass",
57
69
  "pass",
58
70
  "fail",
59
71
  ]);
package/src/provider.ts CHANGED
@@ -109,6 +109,8 @@ function browserAction(action: ComputerBrowserAction): BrowserAction {
109
109
  return { action: "snapshot" };
110
110
  case "navigate":
111
111
  return { action: "navigate", url: action.url };
112
+ case "close-origins":
113
+ return { action: "close-origins", origins: action.origins };
112
114
  case "click":
113
115
  return {
114
116
  action: "click",
@@ -303,11 +305,11 @@ function summarize(report: WorkspaceSyncReportV1): ComputerSyncSummaryV1 {
303
305
  const ignored = total((root) => root.ignored);
304
306
  const omitted = total((root) => root.omitted);
305
307
  const detail: string[] = [];
306
- if (ignored > 0) {
307
- detail.push(
308
- `Excluded ${ignored} reproducible Workspace ${ignored === 1 ? "item" : "items"} from sync.`,
309
- );
310
- }
308
+ // Reproducible trees (node_modules, dist, ) are excluded by design; the
309
+ // count is kept on the summary for the Session log, but it is not a reason
310
+ // to call the sync degraded that projected "Excluded 5 reproducible
311
+ // Workspace items from sync." into the conversation, where it meant nothing
312
+ // to the person reading it (2026-09-05).
311
313
  if (omitted > 0) {
312
314
  detail.push(
313
315
  `Omitted ${omitted} manifest ${omitted === 1 ? "entry" : "entries"} at the sync safety limit.`,
@@ -320,12 +322,13 @@ function summarize(report: WorkspaceSyncReportV1): ComputerSyncSummaryV1 {
320
322
  }
321
323
  const summary: ComputerSyncSummaryV1 = {
322
324
  // Every root failing is `unavailable` — the usual shape of a paused
323
- // Sprite. Any partial failure or bounded exclusion is truthfully degraded.
325
+ // Sprite. Any partial failure or safety-limit omission is truthfully
326
+ // degraded; a by-design exclusion is not.
324
327
  status:
325
328
  report.failures.length > 0 &&
326
329
  report.roots.every((root) => root.failures.length > 0)
327
330
  ? "unavailable"
328
- : report.failures.length > 0 || ignored > 0 || omitted > 0
331
+ : report.failures.length > 0 || omitted > 0
329
332
  ? "degraded"
330
333
  : "ok",
331
334
  detail: detail.join(" ").slice(0, 512),
package/src/sync.test.ts CHANGED
@@ -1332,7 +1332,7 @@ describe("the durable-root sync on the Computer handle", () => {
1332
1332
  }
1333
1333
  });
1334
1334
 
1335
- test("reports a bounded dependency exclusion as degraded while source still syncs", async () => {
1335
+ test("a by-design dependency exclusion is still an ok sync, counted but not narrated", async () => {
1336
1336
  const { sprite, open } = providerHarness([APPLET_SOURCE_PACKAGE_ROOT]);
1337
1337
  const handle = await open();
1338
1338
  sprite.shellWrite(
@@ -1349,15 +1349,13 @@ describe("the durable-root sync on the Computer handle", () => {
1349
1349
  const summary = await handle.sync!.reconcile("turn-end");
1350
1350
 
1351
1351
  expect(summary).toMatchObject({
1352
- status: "degraded",
1352
+ status: "ok",
1353
1353
  pushed: 1,
1354
1354
  ignored: 1,
1355
1355
  omitted: 0,
1356
1356
  failures: 0,
1357
1357
  });
1358
- expect(summary.detail).toBe(
1359
- "Excluded 1 reproducible Workspace item from sync.",
1360
- );
1358
+ expect(summary.detail).toBe("");
1361
1359
  });
1362
1360
 
1363
1361
  // The sync-now seam of ADR 0022 decision 7, provider side: an Applet publish