@brett_lamy/docstream 1.22.0 → 1.23.0

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.
@@ -96,6 +96,7 @@ export function getReplayDevtools(events) {
96
96
  // request was sent that far before it (its own duration, for a lone request).
97
97
  const sent = Math.max(0, startTime !== undefined && batchEnd !== undefined ? at - (batchEnd - startTime) : at - (duration ?? 0));
98
98
  requests.push({
99
+ key: str(raw.requestId) ?? str(raw.id),
99
100
  time: sent,
100
101
  duration,
101
102
  method: (str(raw.method) ?? 'GET').toUpperCase(),
@@ -144,11 +145,11 @@ export function getReplayDevtools(events) {
144
145
  const detail = str(payload.message) ?? str(payload.detail);
145
146
  const message = detail ? `Uncaught ${label}: ${detail}` : `Uncaught ${label}`;
146
147
  const trace = Array.isArray(payload.stack) ? payload.stack.map(String) : str(payload.stack)?.split('\n').map((l) => l.trim()).filter(Boolean);
147
- consoleEntries.push({ time, level: 'error', message, args: [message], trace: trace?.length ? trace : undefined, source: 'exception' });
148
+ consoleEntries.push({ key: str(payload.id), time, level: 'error', message, args: [message], trace: trace?.length ? trace : undefined, source: 'exception' });
148
149
  }
149
150
  else if (CONSOLE_TAGS.has(tag)) {
150
151
  const args = Array.isArray(payload.args) ? payload.args.map((a) => asText(a) ?? '') : [str(payload.message) ?? str(payload.label) ?? asText(payload.detail) ?? ''];
151
- consoleEntries.push({ time, level: levelOf(payload.level ?? tag), message: args.join(' '), args, source: 'custom' });
152
+ consoleEntries.push({ key: str(payload.id), time, level: levelOf(payload.level ?? tag), message: args.join(' '), args, source: 'custom' });
152
153
  }
153
154
  }
154
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/replay/devtools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/replay/devtools.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ export type { ReplayMarker, ReplayMarkerKind, ReplayMeta, ReplayPointerPoint, Re
7
7
  export { getReplayDevtools, replayDevtoolsAt, requestName } from './devtools.js';
8
8
  export type { ReplayConsoleEntry, ReplayConsoleLevel, ReplayDevtools, ReplayDevtoolsState, ReplayRequest } from './devtools.js';
9
9
  export type { ReplayDevtoolsTab } from './ReplayDevtools.js';
10
+ export { getReplayInspections, replayInspectionAt, resolveReplayInspections } from './inspections.js';
11
+ export type { ReplayInspection, ReplayInspectionTab, ResolvedReplayInspection } from './inspections.js';
10
12
  export { ReplayEventType, ReplayIncrementalSource, ReplayMouseInteraction } from './types.js';
11
13
  export type { ReplayEvent } from './types.js';
12
14
  export { isReplayQaUrl, normalizeReplayEmbedUrl } from './url.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACpG,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7H,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC3F,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACpG,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7H,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACnG,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC3F,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -2,6 +2,7 @@ export { ReplayEmbed, ReplayPreview, formatReplayTime } from './ReplayPreview.js
2
2
  export { ReplayStage, preloadReplayStage } from './ReplayStage.js';
3
3
  export { getReplayMarkers, getReplayMeta, getReplayPointerTrack, replayPointerAt } from './markers.js';
4
4
  export { getReplayDevtools, replayDevtoolsAt, requestName } from './devtools.js';
5
+ export { getReplayInspections, replayInspectionAt, resolveReplayInspections } from './inspections.js';
5
6
  export { ReplayEventType, ReplayIncrementalSource, ReplayMouseInteraction } from './types.js';
6
7
  export { isReplayQaUrl, normalizeReplayEmbedUrl } from './url.js';
7
8
  export { ReplayFile, isRrwebUrl } from './ReplayFile.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAa/E,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEpG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAa/E,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEpG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEnG,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { ReplayDevtools } from './devtools.js';
2
+ import { type ReplayEvent } from './types.js';
3
+ export type ReplayInspectionTab = 'network' | 'console';
4
+ export interface ReplayInspection {
5
+ /** Stable id; defaults to `inspect-<n>`. */
6
+ id?: string;
7
+ /** Milliseconds from the start of the recording. */
8
+ time: number;
9
+ /** The DevTools tab to open (default: `network` when `request` is set, else `console`). */
10
+ tab?: ReplayInspectionTab;
11
+ /** The request to select: the recording's id for it (`key`), or its URL. */
12
+ request?: string;
13
+ /** The console message to select: the recording's id for it (`key`), or text it contains. */
14
+ message?: string;
15
+ /** What was found, shown above the panel while the inspection is current. */
16
+ label?: string;
17
+ }
18
+ /** An inspection with its defaults filled in and its target resolved against the recording's DevTools. */
19
+ export interface ResolvedReplayInspection {
20
+ id: string;
21
+ time: number;
22
+ tab: ReplayInspectionTab;
23
+ label?: string;
24
+ /** The `ReplayRequest.id` to select, when the target was found. */
25
+ requestId?: string;
26
+ /** The `ReplayConsoleEntry.id` to select, when the target was found. */
27
+ messageId?: string;
28
+ }
29
+ export declare const INSPECT_TAG = "inspect";
30
+ /** The `inspect` custom events in a recording, as inspections (times in ms from its first event). */
31
+ export declare function getReplayInspections(events: readonly ReplayEvent[]): ReplayInspection[];
32
+ /** Fills in each inspection's id and tab and finds its request or message; sorted by time. */
33
+ export declare function resolveReplayInspections(inspections: readonly ReplayInspection[], tools: ReplayDevtools): ResolvedReplayInspection[];
34
+ /** The inspection current at `time`: the latest at or before it. */
35
+ export declare function replayInspectionAt(inspections: readonly ResolvedReplayInspection[], time: number): ResolvedReplayInspection | undefined;
36
+ //# sourceMappingURL=inspections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspections.d.ts","sourceRoot":"","sources":["../../src/replay/inspections.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAsB,cAAc,EAAiB,MAAM,YAAY,CAAA;AACnF,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAE3D,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,CAAA;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,2FAA2F;IAC3F,GAAG,CAAC,EAAE,mBAAmB,CAAA;IACzB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,0GAA0G;AAC1G,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,mBAAmB,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,WAAW,YAAY,CAAA;AAIpC,qGAAqG;AACrG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAavF;AAkBD,8FAA8F;AAC9F,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,EAAE,KAAK,EAAE,cAAc,GAAG,wBAAwB,EAAE,CAepI;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,SAAS,wBAAwB,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAOvI"}
@@ -0,0 +1,64 @@
1
+ import { ReplayEventType } from './types.js';
2
+ export const INSPECT_TAG = 'inspect';
3
+ const str = (value) => (typeof value === 'string' && value ? value : undefined);
4
+ /** The `inspect` custom events in a recording, as inspections (times in ms from its first event). */
5
+ export function getReplayInspections(events) {
6
+ const list = [...events].sort((a, b) => a.timestamp - b.timestamp);
7
+ const start = list[0]?.timestamp ?? 0;
8
+ const out = [];
9
+ for (const event of list) {
10
+ if (event.type !== ReplayEventType.Custom)
11
+ continue;
12
+ const data = (event.data ?? {});
13
+ if (data.tag !== INSPECT_TAG)
14
+ continue;
15
+ const p = data.payload ?? {};
16
+ const tab = p.tab === 'network' || p.tab === 'console' ? p.tab : undefined;
17
+ out.push({ id: str(p.id), time: event.timestamp - start, tab, request: str(p.request), message: str(p.message), label: str(p.label) });
18
+ }
19
+ return out;
20
+ }
21
+ function findRequest(network, target, time) {
22
+ const byKey = network.find((r) => r.key === target);
23
+ if (byKey)
24
+ return byKey;
25
+ // By URL (exact, else the address without its origin): the one sent nearest the inspection.
26
+ const matches = network.filter((r) => r.url === target || r.url.replace(/^\w+:\/\/[^/]+/, '') === target);
27
+ return matches.sort((a, b) => Math.abs(a.time - time) - Math.abs(b.time - time))[0];
28
+ }
29
+ function findMessage(messages, target, time) {
30
+ const byKey = messages.find((m) => m.key === target);
31
+ if (byKey)
32
+ return byKey;
33
+ const matches = messages.filter((m) => m.message.includes(target));
34
+ // The last one logged by the inspection, else the first after it.
35
+ return matches.filter((m) => m.time <= time).at(-1) ?? matches[0];
36
+ }
37
+ /** Fills in each inspection's id and tab and finds its request or message; sorted by time. */
38
+ export function resolveReplayInspections(inspections, tools) {
39
+ return inspections
40
+ .map((inspection, i) => {
41
+ const request = inspection.request ? findRequest(tools.network, inspection.request, inspection.time) : undefined;
42
+ const message = inspection.message ? findMessage(tools.console, inspection.message, inspection.time) : undefined;
43
+ return {
44
+ id: inspection.id ?? `inspect-${i}`,
45
+ time: Math.max(0, inspection.time),
46
+ tab: inspection.tab ?? (inspection.request ? 'network' : 'console'),
47
+ label: inspection.label,
48
+ requestId: request?.id,
49
+ messageId: message?.id,
50
+ };
51
+ })
52
+ .sort((a, b) => a.time - b.time);
53
+ }
54
+ /** The inspection current at `time`: the latest at or before it. */
55
+ export function replayInspectionAt(inspections, time) {
56
+ let current;
57
+ for (const inspection of inspections) {
58
+ if (inspection.time > time)
59
+ break;
60
+ current = inspection;
61
+ }
62
+ return current;
63
+ }
64
+ //# sourceMappingURL=inspections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspections.js","sourceRoot":"","sources":["../../src/replay/inspections.ts"],"names":[],"mappings":"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"}
package/dist/styles.css CHANGED
@@ -4440,6 +4440,14 @@
4440
4440
  /* ── Replay DevTools: the Console / Network buttons in the top bar and the panel over the page ──
4441
4441
  Chrome's DevTools, in the player's tokens. Failed requests and errors read --destructive, warnings --warning. */
4442
4442
  @layer docstream.replay {
4443
+ /* Text tones that keep 4.5:1 on the card in light and dark: the theme's muted, red and amber, pulled toward the
4444
+ foreground (a theme's own --muted-foreground or --destructive is often tuned for larger text). */
4445
+ :where([data-slot="replay-preview"]) {
4446
+ --replay-devtools-dim: color-mix(in srgb, var(--foreground, #18181b) 68%, var(--card, #ffffff));
4447
+ --replay-devtools-red: color-mix(in srgb, var(--destructive, #dc2626) 74%, var(--foreground, #18181b));
4448
+ --replay-devtools-amber: color-mix(in srgb, var(--warning, #b45309) 56%, var(--foreground, #18181b));
4449
+ }
4450
+
4443
4451
  :where([data-slot="replay-preview-actions"]) {
4444
4452
  display: flex;
4445
4453
  flex-shrink: 0;
@@ -4465,7 +4473,7 @@
4465
4473
  outline: none;
4466
4474
  cursor: pointer;
4467
4475
  appearance: none;
4468
- color: var(--muted-foreground, #71717a);
4476
+ color: var(--replay-devtools-dim);
4469
4477
  background: transparent;
4470
4478
  font: inherit;
4471
4479
  font-size: 11.5px;
@@ -4489,12 +4497,12 @@
4489
4497
  }
4490
4498
 
4491
4499
  :where([data-slot="replay-preview"] [data-part="failed"]) {
4492
- color: var(--destructive, #dc2626);
4500
+ color: var(--replay-devtools-red);
4493
4501
  font-weight: 600;
4494
4502
  }
4495
4503
 
4496
4504
  :where([data-slot="replay-preview"] [data-part="warn"]) {
4497
- color: var(--warning, #b45309);
4505
+ color: var(--replay-devtools-amber);
4498
4506
  font-weight: 600;
4499
4507
  }
4500
4508
 
@@ -4549,7 +4557,7 @@
4549
4557
  outline: none;
4550
4558
  cursor: pointer;
4551
4559
  appearance: none;
4552
- color: var(--muted-foreground, #71717a);
4560
+ color: var(--replay-devtools-dim);
4553
4561
  background: transparent;
4554
4562
  font: inherit;
4555
4563
  }
@@ -4563,19 +4571,47 @@
4563
4571
  box-shadow: inset 0 0 0 2px var(--ring, #6366f1);
4564
4572
  }
4565
4573
 
4566
- :where([data-slot="replay-devtools-tabs"] [data-part="at"]) {
4574
+ :where([data-slot="replay-devtools-tablist"]) {
4575
+ display: flex;
4576
+ align-items: stretch;
4577
+ }
4578
+
4579
+ :where([data-slot="replay-devtools-tablist"] > button) {
4567
4580
  display: inline-flex;
4568
4581
  align-items: center;
4569
- margin-inline-start: auto;
4570
- padding-inline: 8px;
4571
- color: var(--muted-foreground, #71717a);
4572
- font-variant-numeric: tabular-nums;
4582
+ gap: 5px;
4583
+ margin: 0;
4584
+ padding: 0 10px;
4585
+ border: 0;
4586
+ border-bottom: 2px solid transparent;
4587
+ outline: none;
4588
+ cursor: pointer;
4589
+ appearance: none;
4590
+ color: var(--replay-devtools-dim);
4591
+ background: transparent;
4592
+ font: inherit;
4573
4593
  }
4574
4594
 
4595
+ :where([data-slot="replay-devtools-tablist"] > button[aria-selected="true"]) {
4596
+ color: var(--foreground, #18181b);
4597
+ border-bottom-color: var(--primary, #2563eb);
4598
+ }
4599
+
4600
+ :where([data-slot="replay-devtools-tablist"] > button:focus-visible) {
4601
+ box-shadow: inset 0 0 0 2px var(--ring, #6366f1);
4602
+ }
4603
+
4604
+
4605
+
4606
+
4575
4607
  :where([data-slot="replay-devtools-tabs"] > [data-slot="replay-devtools-close"], [data-slot="replay-devtools-detail-tabs"] > [data-slot="replay-devtools-close"]) {
4576
4608
  padding: 0 8px;
4577
4609
  }
4578
4610
 
4611
+ :where([data-slot="replay-devtools-tabs"] > [data-slot="replay-devtools-close"]) {
4612
+ margin-inline-start: auto;
4613
+ }
4614
+
4579
4615
  :where([data-slot="replay-devtools-pane"]) {
4580
4616
  display: flex;
4581
4617
  flex: 1 1 0%;
@@ -4635,7 +4671,7 @@
4635
4671
  outline: none;
4636
4672
  cursor: pointer;
4637
4673
  appearance: none;
4638
- color: var(--muted-foreground, #71717a);
4674
+ color: var(--replay-devtools-dim);
4639
4675
  background: transparent;
4640
4676
  font: inherit;
4641
4677
  }
@@ -4669,19 +4705,19 @@
4669
4705
  }
4670
4706
 
4671
4707
  :where([data-slot="replay-devtools-message"][data-level="warn"]) {
4672
- color: color-mix(in srgb, var(--warning, #b45309) 80%, var(--foreground, #18181b));
4708
+ color: var(--replay-devtools-amber);
4673
4709
  background: color-mix(in srgb, var(--warning, #f59e0b) 10%, transparent);
4674
4710
  border-bottom-color: color-mix(in srgb, var(--warning, #f59e0b) 25%, transparent);
4675
4711
  }
4676
4712
 
4677
4713
  :where([data-slot="replay-devtools-message"][data-level="error"]) {
4678
- color: var(--destructive, #dc2626);
4714
+ color: var(--replay-devtools-red);
4679
4715
  background: color-mix(in srgb, var(--destructive, #dc2626) 8%, transparent);
4680
4716
  border-bottom-color: color-mix(in srgb, var(--destructive, #dc2626) 22%, transparent);
4681
4717
  }
4682
4718
 
4683
4719
  :where([data-slot="replay-devtools-message"][data-level="debug"]) {
4684
- color: var(--muted-foreground, #71717a);
4720
+ color: var(--replay-devtools-dim);
4685
4721
  }
4686
4722
 
4687
4723
  :where([data-slot="replay-devtools-message"] > details, [data-slot="replay-devtools-message"] > [data-part="line"]) {
@@ -4737,7 +4773,7 @@
4737
4773
  outline: none;
4738
4774
  cursor: pointer;
4739
4775
  appearance: none;
4740
- color: var(--muted-foreground, #71717a);
4776
+ color: var(--replay-devtools-dim);
4741
4777
  background: transparent;
4742
4778
  font: inherit;
4743
4779
  font-variant-numeric: tabular-nums;
@@ -4756,7 +4792,7 @@
4756
4792
  :where([data-slot="replay-devtools-empty"], [data-slot="replay-devtools-later"]) {
4757
4793
  margin: 0;
4758
4794
  padding: 10px 12px;
4759
- color: var(--muted-foreground, #71717a);
4795
+ color: var(--replay-devtools-dim);
4760
4796
  }
4761
4797
 
4762
4798
  :where([data-slot="replay-devtools-later"]) {
@@ -4796,7 +4832,7 @@
4796
4832
  height: 22px;
4797
4833
  padding: 0 8px;
4798
4834
  border-bottom: 1px solid var(--border, #e4e4e7);
4799
- color: var(--muted-foreground, #71717a);
4835
+ color: var(--replay-devtools-dim);
4800
4836
  background: var(--card, #ffffff);
4801
4837
  font-weight: 500;
4802
4838
  text-align: start;
@@ -4844,13 +4880,18 @@
4844
4880
  :where([data-slot="replay-devtools-table"] tbody tr:focus-visible) {
4845
4881
  box-shadow: inset 0 0 0 2px var(--ring, #6366f1);
4846
4882
  }
4883
+ /* The inspected request or message: a bar down its leading edge (the selection tint shows it's open). */
4884
+ :where([data-slot="replay-devtools-table"] tbody tr[data-inspected], [data-slot="replay-devtools-message"][data-inspected]) {
4885
+ box-shadow: inset 3px 0 0 var(--primary, #2563eb);
4886
+ }
4887
+
4847
4888
 
4848
4889
  :where([data-slot="replay-devtools-table"] tr[data-failed]) {
4849
- color: var(--destructive, #dc2626);
4890
+ color: var(--replay-devtools-red);
4850
4891
  }
4851
4892
 
4852
4893
  :where([data-slot="replay-devtools-table"] tr[data-pending]) {
4853
- color: var(--muted-foreground, #71717a);
4894
+ color: var(--replay-devtools-dim);
4854
4895
  }
4855
4896
 
4856
4897
  :where([data-slot="replay-devtools-table"] td[data-col="waterfall"]) {
@@ -4871,7 +4912,7 @@
4871
4912
  }
4872
4913
 
4873
4914
  :where([data-slot="replay-devtools-table"] tr[data-pending] [data-part="bar"]) {
4874
- background: color-mix(in srgb, var(--muted-foreground, #71717a) 50%, transparent);
4915
+ background: color-mix(in srgb, var(--replay-devtools-dim) 50%, transparent);
4875
4916
  }
4876
4917
 
4877
4918
  :where([data-slot="replay-devtools-status"]) {
@@ -4882,7 +4923,7 @@
4882
4923
  height: 22px;
4883
4924
  padding: 0 8px;
4884
4925
  border-top: 1px solid var(--border, #e4e4e7);
4885
- color: var(--muted-foreground, #71717a);
4926
+ color: var(--replay-devtools-dim);
4886
4927
  font-variant-numeric: tabular-nums;
4887
4928
  }
4888
4929
 
@@ -4939,7 +4980,7 @@
4939
4980
  :where([data-slot="replay-devtools-section"] dt) {
4940
4981
  flex-shrink: 0;
4941
4982
  min-width: 130px;
4942
- color: var(--muted-foreground, #71717a);
4983
+ color: var(--replay-devtools-dim);
4943
4984
  }
4944
4985
 
4945
4986
  :where([data-slot="replay-devtools-section"] dd) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brett_lamy/docstream",
3
- "version": "1.22.0",
3
+ "version": "1.23.0",
4
4
  "description": "GitBook-aware readonly markdown and AI stream renderer.",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -5,10 +5,12 @@
5
5
  waiting at the playhead shows as pending), and a request's row opens its headers, payload and response.
6
6
 
7
7
  Everything is a function of the playhead: scrub back and the lists shrink to what DevTools showed then. A row's
8
- time jumps the player there. Esc closes the panel. Plain React + plain CSS, like the player. */
8
+ time jumps the player there. Esc closes the panel. An inspection (inspections.ts) selects its request or
9
+ message and marks it. Plain React + plain CSS, like the player. */
9
10
  import { useEffect, useMemo, useRef, useState, type KeyboardEvent as ReactKeyboardEvent, type PointerEvent as ReactPointerEvent } from 'react'
10
11
  import { ChevronRight, CircleX, Info, Network, SquareTerminal, TriangleAlert, X } from 'lucide-react'
11
12
  import type { ReplayConsoleEntry, ReplayDevtoolsState, ReplayRequest } from './devtools'
13
+ import type { ResolvedReplayInspection } from './inspections'
12
14
 
13
15
  export type ReplayDevtoolsTab = 'console' | 'network'
14
16
 
@@ -55,14 +57,16 @@ export function DevtoolsButtons({ state, open, onOpen }: {
55
57
  )
56
58
  }
57
59
 
58
- /** The panel over the page: Console and Network, cut at the playhead. */
59
- export function DevtoolsPanel({ state, at, tab, onTab, onClose, onSeek }: {
60
- state: ReplayDevtoolsState; at: number; tab: ReplayDevtoolsTab; onTab: (tab: ReplayDevtoolsTab) => void
61
- onClose: () => void; onSeek: (ms: number) => void
60
+ /** The panel over the page: Console and Network, cut at the playhead. `inspection` selects and marks its target;
61
+ * `autoFocus` (default true) moves focus into the panel as it opens — off when an inspection opened it mid-play. */
62
+ export function DevtoolsPanel({ state, tab, onTab, onClose, onSeek, inspection, autoFocus = true }: {
63
+ state: ReplayDevtoolsState; tab: ReplayDevtoolsTab; onTab: (tab: ReplayDevtoolsTab) => void
64
+ onClose: () => void; onSeek: (ms: number) => void; inspection?: ResolvedReplayInspection | null; autoFocus?: boolean
62
65
  }) {
63
66
  const panel = useRef<HTMLDivElement>(null)
64
- const [height, setHeight] = useState(58)
65
- useEffect(() => { panel.current?.focus({ preventScroll: true }) }, [])
67
+ // Opened by an inspection, the panel starts taller: its point is the request's details.
68
+ const [height, setHeight] = useState(inspection ? 72 : 58)
69
+ useEffect(() => { if (autoFocus) panel.current?.focus({ preventScroll: true }) }, [autoFocus])
66
70
 
67
71
  // Drag the top edge to resize, as a fraction of the stage.
68
72
  const resize = (e: ReactPointerEvent<HTMLDivElement>) => {
@@ -96,7 +100,8 @@ export function DevtoolsPanel({ state, at, tab, onTab, onClose, onSeek }: {
96
100
  style={{ height: `${height}%` }}
97
101
  >
98
102
  <div data-slot="replay-devtools-resize" aria-hidden="true" onPointerDown={resize} />
99
- <div data-slot="replay-devtools-tabs" role="tablist" aria-label="DevTools panels">
103
+ <div data-slot="replay-devtools-tabs">
104
+ <div data-slot="replay-devtools-tablist" role="tablist" aria-label="DevTools panels">
100
105
  {tabs.map((t) => (
101
106
  <button
102
107
  key={t.id}
@@ -114,10 +119,12 @@ export function DevtoolsPanel({ state, at, tab, onTab, onClose, onSeek }: {
114
119
  {t.id === 'network' && state.counts.failed ? <span data-part="failed">{state.counts.failed}</span> : null}
115
120
  </button>
116
121
  ))}
117
- <span data-part="at">As of {time(at)}</span>
122
+ </div>
118
123
  <button type="button" data-slot="replay-devtools-close" aria-label="Close DevTools" onClick={onClose}><X size={14} /></button>
119
124
  </div>
120
- {tab === 'console' ? <ConsolePane state={state} onSeek={onSeek} /> : <NetworkPane state={state} onSeek={onSeek} />}
125
+ {tab === 'console'
126
+ ? <ConsolePane state={state} onSeek={onSeek} inspected={inspection?.tab === 'console' ? inspection : null} />
127
+ : <NetworkPane state={state} onSeek={onSeek} inspected={inspection?.tab === 'network' ? inspection : null} />}
121
128
  </div>
122
129
  )
123
130
  }
@@ -127,7 +134,9 @@ export function DevtoolsPanel({ state, at, tab, onTab, onClose, onSeek }: {
127
134
  type LevelFilter = 'all' | 'error' | 'warn' | 'info'
128
135
  const LEVEL_ICON = { error: CircleX, warn: TriangleAlert, info: Info } as const
129
136
 
130
- function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (ms: number) => void }) {
137
+ function ConsolePane({ state, onSeek, inspected }: {
138
+ state: ReplayDevtoolsState; onSeek: (ms: number) => void; inspected: ResolvedReplayInspection | null
139
+ }) {
131
140
  const [query, setQuery] = useState('')
132
141
  const [level, setLevel] = useState<LevelFilter>('all')
133
142
  const list = useRef<HTMLDivElement>(null)
@@ -137,12 +146,17 @@ function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
137
146
  (level === 'all' || (level === 'info' ? e.level === 'info' || e.level === 'log' || e.level === 'debug' : e.level === level)) &&
138
147
  (!q || e.message.toLowerCase().includes(q)))
139
148
  }, [state.console, query, level])
140
- // Follow new messages as they're logged, unless you've scrolled up to read.
149
+ // Follow new messages as they're logged, unless you've scrolled up to read (or an inspection is showing one).
141
150
  const pinned = useRef(true)
151
+ const inspectedId = inspected?.messageId
152
+ const shown = inspectedId !== undefined && rows.some((r) => r.id === inspectedId)
142
153
  useEffect(() => {
143
154
  const el = list.current
144
- if (el && pinned.current) el.scrollTop = el.scrollHeight
145
- }, [rows.length])
155
+ if (el && pinned.current && !shown) el.scrollTop = el.scrollHeight
156
+ }, [rows.length, shown])
157
+ useEffect(() => {
158
+ if (shown) list.current?.querySelector('[data-inspected]')?.scrollIntoView?.({ block: 'nearest' })
159
+ }, [shown, inspected?.id])
146
160
  return (
147
161
  <div data-slot="replay-devtools-pane" data-pane="console">
148
162
  <div data-slot="replay-devtools-toolbar">
@@ -165,7 +179,7 @@ function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
165
179
  aria-label="Console messages"
166
180
  onScroll={(e) => { const el = e.currentTarget; pinned.current = el.scrollHeight - el.scrollTop - el.clientHeight < 8 }}
167
181
  >
168
- {rows.map((entry) => <ConsoleRow key={entry.id} entry={entry} onSeek={onSeek} />)}
182
+ {rows.map((entry) => <ConsoleRow key={entry.id} entry={entry} onSeek={onSeek} inspected={entry.id === inspectedId} />)}
169
183
  {!rows.length ? <p data-slot="replay-devtools-empty">{state.console.length ? 'No messages match the filter' : 'Nothing logged yet'}</p> : null}
170
184
  {state.counts.laterMessages ? <p data-slot="replay-devtools-later">{state.counts.laterMessages} more later in the recording</p> : null}
171
185
  </div>
@@ -173,7 +187,7 @@ function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
173
187
  )
174
188
  }
175
189
 
176
- function ConsoleRow({ entry, onSeek }: { entry: ReplayConsoleEntry; onSeek: (ms: number) => void }) {
190
+ function ConsoleRow({ entry, onSeek, inspected }: { entry: ReplayConsoleEntry; onSeek: (ms: number) => void; inspected: boolean }) {
177
191
  const Glyph = entry.level === 'error' || entry.level === 'warn' || entry.level === 'info' ? LEVEL_ICON[entry.level] : null
178
192
  const body = (
179
193
  <>
@@ -182,7 +196,7 @@ function ConsoleRow({ entry, onSeek }: { entry: ReplayConsoleEntry; onSeek: (ms:
182
196
  </>
183
197
  )
184
198
  return (
185
- <div data-slot="replay-devtools-message" data-level={entry.level}>
199
+ <div data-slot="replay-devtools-message" data-level={entry.level} data-inspected={inspected || undefined}>
186
200
  {entry.trace?.length ? (
187
201
  <details>
188
202
  <summary>{body}</summary>
@@ -201,10 +215,20 @@ type Row = ReplayRequest & { pending: boolean }
201
215
 
202
216
  const statusText = (r: Row) => (r.pending ? '(pending)' : r.status === undefined ? (r.failed ? '(failed)' : '—') : r.status === 0 ? '(failed)' : String(r.status))
203
217
 
204
- function NetworkPane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (ms: number) => void }) {
218
+ function NetworkPane({ state, onSeek, inspected }: {
219
+ state: ReplayDevtoolsState; onSeek: (ms: number) => void; inspected: ResolvedReplayInspection | null
220
+ }) {
205
221
  const [query, setQuery] = useState('')
206
222
  const [filter, setFilter] = useState<RequestFilter>('all')
207
- const [selectedId, setSelectedId] = useState<string | null>(null)
223
+ const inspectedId = inspected?.requestId
224
+ const [selectedId, setSelectedId] = useState<string | null>(inspectedId ?? null)
225
+ const table = useRef<HTMLDivElement>(null)
226
+ // A new inspection selects its request (once it has been sent) and brings its row into view.
227
+ useEffect(() => { if (inspectedId) setSelectedId(inspectedId) }, [inspected?.id, inspectedId])
228
+ const sent = inspectedId !== undefined && state.network.some((r) => r.id === inspectedId)
229
+ useEffect(() => {
230
+ if (sent) table.current?.querySelector('[data-inspected]')?.scrollIntoView?.({ block: 'nearest' })
231
+ }, [sent, inspected?.id])
208
232
  const rows = useMemo(() => {
209
233
  const q = query.trim().toLowerCase()
210
234
  return state.network.filter((r) =>
@@ -233,7 +257,7 @@ function NetworkPane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
233
257
  </div>
234
258
  </div>
235
259
  <div data-slot="replay-devtools-network">
236
- <div data-slot="replay-devtools-table-wrap">
260
+ <div ref={table} data-slot="replay-devtools-table-wrap">
237
261
  <table data-slot="replay-devtools-table">
238
262
  <thead>
239
263
  <tr>
@@ -249,6 +273,7 @@ function NetworkPane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
249
273
  data-failed={(r.failed && !r.pending) || undefined}
250
274
  data-pending={r.pending || undefined}
251
275
  aria-selected={r.id === selectedId}
276
+ data-inspected={r.id === inspectedId || undefined}
252
277
  tabIndex={0}
253
278
  onClick={() => setSelectedId(r.id === selectedId ? null : r.id)}
254
279
  onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setSelectedId(r.id === selectedId ? null : r.id) } }}
@@ -306,13 +331,15 @@ function RequestDetail({ request, onClose, onSeek }: { request: Row; onClose: ()
306
331
  ]
307
332
  return (
308
333
  <div data-slot="replay-devtools-detail">
309
- <div data-slot="replay-devtools-detail-tabs" role="tablist" aria-label={`${request.name} details`}>
334
+ <div data-slot="replay-devtools-detail-tabs">
310
335
  <button type="button" aria-label="Close request details" data-slot="replay-devtools-close" onClick={onClose}><X size={13} /></button>
311
- {(['headers', 'payload', 'response'] as const).map((t) => (
312
- <button key={t} type="button" role="tab" aria-selected={tab === t} onClick={() => setTab(t)}>
313
- {t[0]!.toUpperCase() + t.slice(1)}
314
- </button>
315
- ))}
336
+ <div data-slot="replay-devtools-tablist" role="tablist" aria-label={`${request.name} details`}>
337
+ {(['headers', 'payload', 'response'] as const).map((t) => (
338
+ <button key={t} type="button" role="tab" aria-selected={tab === t} onClick={() => setTab(t)}>
339
+ {t[0]!.toUpperCase() + t.slice(1)}
340
+ </button>
341
+ ))}
342
+ </div>
316
343
  </div>
317
344
  <div data-slot="replay-devtools-detail-body">
318
345
  {tab === 'headers' ? (