@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 +8 -8
- package/src/computer.ts +9 -1
- package/src/doctor.test.ts +14 -2
- package/src/provider.ts +10 -7
- package/src/sync.test.ts +3 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frockbot/plugin-fly-sprite",
|
|
3
|
-
"version": "0.3.
|
|
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.
|
|
29
|
-
"@frockbot/computer-host-protocol": "0.3.
|
|
30
|
-
"@frockbot/computer-host-runtime": "0.3.
|
|
31
|
-
"@frockbot/kernel-contracts": "0.3.
|
|
32
|
-
"@frockbot/plugin-computer": "0.3.
|
|
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.
|
|
37
|
-
"@frockbot/workspace-store": "0.3.
|
|
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:
|
|
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;
|
package/src/doctor.test.ts
CHANGED
|
@@ -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: "
|
|
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("
|
|
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
|
-
|
|
307
|
-
|
|
308
|
-
|
|
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
|
|
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 ||
|
|
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("
|
|
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: "
|
|
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
|