@vgai/sdk 0.5.18 → 0.5.19

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
@@ -2,7 +2,7 @@
2
2
  "name": "@vgai/sdk",
3
3
  "author": "Volter AI, Inc.",
4
4
  "license": "Apache-2.0",
5
- "version": "0.5.18",
5
+ "version": "0.5.19",
6
6
  "type": "module",
7
7
  "repository": {
8
8
  "type": "git",
@@ -30,7 +30,7 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@modelcontextprotocol/sdk": "^1.30.0",
33
- "@vgai/engine": "0.5.18",
33
+ "@vgai/engine": "0.5.19",
34
34
  "playwright": "^1.58.2",
35
35
  "zod": "^4.3.6"
36
36
  }
@@ -102,6 +102,29 @@ export type SessionJournalEvent =
102
102
  readonly name: string | null;
103
103
  readonly logFile: string | null;
104
104
  }
105
+ /**
106
+ * A relayed command ran out of budget, and WHICH PLAY-BOOT STEP the page was
107
+ * inside when it did.
108
+ *
109
+ * The row exists because its absence was the defect. Measured 2026-08-20 at
110
+ * N=20000 on the canvas lane: `play` (120s), `screenshot` (15s) and `stop`
111
+ * (30s) all expired against a tab whose WORKER heartbeat kept beating at
112
+ * 0.4s, and the journal's whole account of it was three `command-result`
113
+ * lines saying "the tab is present … and did not respond" — true, and about
114
+ * the tab rather than the page. `phase` is the page's own last word before it
115
+ * went quiet (`editor/src/play-boot-phase.ts`); `null` means no play boot was
116
+ * in flight, which is itself an answer.
117
+ */
118
+ | {
119
+ readonly kind: 'play-stall';
120
+ readonly command: string;
121
+ readonly requestId8: string;
122
+ readonly phase: string | null;
123
+ /** How long the page had been in that phase. `null` with a null phase. */
124
+ readonly phaseAgeMs: number | null;
125
+ /** The budget the command actually waited out. */
126
+ readonly waitedMs: number;
127
+ }
105
128
  /**
106
129
  * THE TRANSPORT ARM. Everything below is one line per transport or
107
130
  * presence fact, and it exists because the journal was BLIND to all of
@@ -469,6 +492,14 @@ export function formatJournalLine(line: SessionJournalLine): string {
469
492
  return `journal: ${at} validation ${line.ok ? 'ok' : 'FAILED'} ${line.path}`;
470
493
  case 'play':
471
494
  return `journal: ${at} play ${line.action}${line.name === null ? '' : ` [${line.name}]`}`;
495
+ case 'play-stall':
496
+ return (
497
+ `journal: ${at} play-stall ${line.command} ${line.requestId8} after ` +
498
+ `${Math.round(line.waitedMs / 1000)}s — ` +
499
+ (line.phase === null
500
+ ? 'no play boot was in flight'
501
+ : `stuck in "${line.phase}" for ${Math.round((line.phaseAgeMs ?? 0) / 1000)}s`)
502
+ );
472
503
  case 'session-started':
473
504
  return `journal: ${at} session-started pid ${line.pid}`;
474
505
  case 'project-opened':