@brett_lamy/docstream 1.22.1 → 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.
@@ -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
@@ -4601,19 +4601,17 @@
4601
4601
  box-shadow: inset 0 0 0 2px var(--ring, #6366f1);
4602
4602
  }
4603
4603
 
4604
- :where([data-slot="replay-devtools-tabs"] [data-part="at"]) {
4605
- display: inline-flex;
4606
- align-items: center;
4607
- margin-inline-start: auto;
4608
- padding-inline: 8px;
4609
- color: var(--replay-devtools-dim);
4610
- font-variant-numeric: tabular-nums;
4611
- }
4604
+
4605
+
4612
4606
 
4613
4607
  :where([data-slot="replay-devtools-tabs"] > [data-slot="replay-devtools-close"], [data-slot="replay-devtools-detail-tabs"] > [data-slot="replay-devtools-close"]) {
4614
4608
  padding: 0 8px;
4615
4609
  }
4616
4610
 
4611
+ :where([data-slot="replay-devtools-tabs"] > [data-slot="replay-devtools-close"]) {
4612
+ margin-inline-start: auto;
4613
+ }
4614
+
4617
4615
  :where([data-slot="replay-devtools-pane"]) {
4618
4616
  display: flex;
4619
4617
  flex: 1 1 0%;
@@ -4882,6 +4880,11 @@
4882
4880
  :where([data-slot="replay-devtools-table"] tbody tr:focus-visible) {
4883
4881
  box-shadow: inset 0 0 0 2px var(--ring, #6366f1);
4884
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
+
4885
4888
 
4886
4889
  :where([data-slot="replay-devtools-table"] tr[data-failed]) {
4887
4890
  color: var(--replay-devtools-red);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brett_lamy/docstream",
3
- "version": "1.22.1",
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>) => {
@@ -116,10 +120,11 @@ export function DevtoolsPanel({ state, at, tab, onTab, onClose, onSeek }: {
116
120
  </button>
117
121
  ))}
118
122
  </div>
119
- <span data-part="at">As of {time(at)}</span>
120
123
  <button type="button" data-slot="replay-devtools-close" aria-label="Close DevTools" onClick={onClose}><X size={14} /></button>
121
124
  </div>
122
- {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} />}
123
128
  </div>
124
129
  )
125
130
  }
@@ -129,7 +134,9 @@ export function DevtoolsPanel({ state, at, tab, onTab, onClose, onSeek }: {
129
134
  type LevelFilter = 'all' | 'error' | 'warn' | 'info'
130
135
  const LEVEL_ICON = { error: CircleX, warn: TriangleAlert, info: Info } as const
131
136
 
132
- 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
+ }) {
133
140
  const [query, setQuery] = useState('')
134
141
  const [level, setLevel] = useState<LevelFilter>('all')
135
142
  const list = useRef<HTMLDivElement>(null)
@@ -139,12 +146,17 @@ function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
139
146
  (level === 'all' || (level === 'info' ? e.level === 'info' || e.level === 'log' || e.level === 'debug' : e.level === level)) &&
140
147
  (!q || e.message.toLowerCase().includes(q)))
141
148
  }, [state.console, query, level])
142
- // 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).
143
150
  const pinned = useRef(true)
151
+ const inspectedId = inspected?.messageId
152
+ const shown = inspectedId !== undefined && rows.some((r) => r.id === inspectedId)
144
153
  useEffect(() => {
145
154
  const el = list.current
146
- if (el && pinned.current) el.scrollTop = el.scrollHeight
147
- }, [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])
148
160
  return (
149
161
  <div data-slot="replay-devtools-pane" data-pane="console">
150
162
  <div data-slot="replay-devtools-toolbar">
@@ -167,7 +179,7 @@ function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
167
179
  aria-label="Console messages"
168
180
  onScroll={(e) => { const el = e.currentTarget; pinned.current = el.scrollHeight - el.scrollTop - el.clientHeight < 8 }}
169
181
  >
170
- {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} />)}
171
183
  {!rows.length ? <p data-slot="replay-devtools-empty">{state.console.length ? 'No messages match the filter' : 'Nothing logged yet'}</p> : null}
172
184
  {state.counts.laterMessages ? <p data-slot="replay-devtools-later">{state.counts.laterMessages} more later in the recording</p> : null}
173
185
  </div>
@@ -175,7 +187,7 @@ function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
175
187
  )
176
188
  }
177
189
 
178
- function ConsoleRow({ entry, onSeek }: { entry: ReplayConsoleEntry; onSeek: (ms: number) => void }) {
190
+ function ConsoleRow({ entry, onSeek, inspected }: { entry: ReplayConsoleEntry; onSeek: (ms: number) => void; inspected: boolean }) {
179
191
  const Glyph = entry.level === 'error' || entry.level === 'warn' || entry.level === 'info' ? LEVEL_ICON[entry.level] : null
180
192
  const body = (
181
193
  <>
@@ -184,7 +196,7 @@ function ConsoleRow({ entry, onSeek }: { entry: ReplayConsoleEntry; onSeek: (ms:
184
196
  </>
185
197
  )
186
198
  return (
187
- <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}>
188
200
  {entry.trace?.length ? (
189
201
  <details>
190
202
  <summary>{body}</summary>
@@ -203,10 +215,20 @@ type Row = ReplayRequest & { pending: boolean }
203
215
 
204
216
  const statusText = (r: Row) => (r.pending ? '(pending)' : r.status === undefined ? (r.failed ? '(failed)' : '—') : r.status === 0 ? '(failed)' : String(r.status))
205
217
 
206
- 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
+ }) {
207
221
  const [query, setQuery] = useState('')
208
222
  const [filter, setFilter] = useState<RequestFilter>('all')
209
- 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])
210
232
  const rows = useMemo(() => {
211
233
  const q = query.trim().toLowerCase()
212
234
  return state.network.filter((r) =>
@@ -235,7 +257,7 @@ function NetworkPane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
235
257
  </div>
236
258
  </div>
237
259
  <div data-slot="replay-devtools-network">
238
- <div data-slot="replay-devtools-table-wrap">
260
+ <div ref={table} data-slot="replay-devtools-table-wrap">
239
261
  <table data-slot="replay-devtools-table">
240
262
  <thead>
241
263
  <tr>
@@ -251,6 +273,7 @@ function NetworkPane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
251
273
  data-failed={(r.failed && !r.pending) || undefined}
252
274
  data-pending={r.pending || undefined}
253
275
  aria-selected={r.id === selectedId}
276
+ data-inspected={r.id === inspectedId || undefined}
254
277
  tabIndex={0}
255
278
  onClick={() => setSelectedId(r.id === selectedId ? null : r.id)}
256
279
  onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setSelectedId(r.id === selectedId ? null : r.id) } }}
@@ -2,7 +2,8 @@
2
2
  plays the recording (rrweb loads lazily, on first render); this adds the chrome around it: a URL bar that
3
3
  follows the recording's navigations, play/pause, a scrubber with the recording's moments on a rail above
4
4
  it, a speed control, fullscreen, a drawn cursor whose clicks ripple, and DevTools: Console and Network buttons
5
- in the top bar with what had been logged and requested by the playhead, which open a DevTools panel over the page. Until the player is ready a
5
+ in the top bar with what had been logged and requested by the playhead, which open a DevTools panel over the page,
6
+ and inspections (inspections.ts) that open it on a request or message as playback reaches them. Until the player is ready a
6
7
  poster (a page-shaped skeleton by default) holds the frame's exact size, so nothing jumps.
7
8
 
8
9
  Plain React + plain CSS (`@layer docstream.replay` in styles.css, `[data-slot]` hooks). Keys (focus inside
@@ -18,6 +19,7 @@ import { Lock, Maximize, Minimize, Pause, Play, RotateCcw } from 'lucide-react'
18
19
  import { ReplayStage } from './ReplayStage'
19
20
  import { DevtoolsButtons, DevtoolsPanel, type ReplayDevtoolsTab } from './ReplayDevtools'
20
21
  import { getReplayDevtools, replayDevtoolsAt } from './devtools'
22
+ import { getReplayInspections, replayInspectionAt, resolveReplayInspections, type ReplayInspection } from './inspections'
21
23
  import { getReplayMarkers, getReplayMeta, getReplayPointerTrack, replayPointerAt } from './markers'
22
24
  import type { ReplayMarker, ReplayMarkerKind, ReplayPointerTrack } from './markers'
23
25
  import type { ReplayStageHandle } from './stage-types'
@@ -36,6 +38,8 @@ export interface ReplayPreviewHandle {
36
38
  seek(ms: number): void
37
39
  toggle(): void
38
40
  getCurrentTime(): number
41
+ /** Jump to an inspection (by its id) and open DevTools on what it found. */
42
+ inspect(id: string): void
39
43
  }
40
44
 
41
45
  /** Options shared by every `ReplayPreview` (an `events` player or a `source` embed). */
@@ -63,11 +67,17 @@ export interface ReplayPlayerOptions {
63
67
  /** Which recorded marker kinds to show (default all). */
64
68
  markerKinds?: ReplayMarkerKind[]
65
69
  /** Console and Network buttons (in the top bar, or beside the controls without the browser chrome) that open a
66
- * DevTools panel cut at the playhead. `true` (default) shows them when the recording has console messages or
67
- * requests; `false` hides them. */
70
+ * DevTools panel cut at the playhead, shown when the recording has console messages, requests or inspections.
71
+ * `disableDevtools` removes them, the panel and the inspections. */
72
+ disableDevtools?: boolean
73
+ /** @deprecated Use `disableDevtools`. `false` is the same as `disableDevtools`. */
68
74
  devtools?: boolean
69
75
  /** Open the DevTools panel on this tab at mount. */
70
76
  defaultDevtoolsTab?: ReplayDevtoolsTab
77
+ /** Moments where a request or console message was inspected. As playback reaches one, DevTools opens on its
78
+ * tab with that request or message selected and the label above it; playback doesn't stop. Added to the
79
+ * recording's own `inspect` custom events, and to the rail as checkpoints. */
80
+ inspections?: ReplayInspection[]
71
81
  /** Draw the recorded pointer and click ripples (default true). */
72
82
  cursor?: boolean
73
83
  /** `width` (default): the page scales to the frame's width and sets its height. `contain`: fill the frame's
@@ -98,7 +108,7 @@ const MARKER_NOUN: Record<ReplayMarkerKind, string> = {
98
108
  export function ReplayPlayer({
99
109
  events, url, title = 'Session replay', chrome = 'browser', trafficLights = true, controls = true,
100
110
  autoplay = false, loop = false, initialTime = 0, speeds = DEFAULT_PLAYER_SPEEDS, markers = true, markerKinds,
101
- cursor = true, devtools = true, defaultDevtoolsTab, fit = 'width', poster, lazy = true, playerRef, onTimeUpdate, onPlayingChange, onMarkerPress,
111
+ cursor = true, disableDevtools = false, devtools = true, defaultDevtoolsTab, inspections, fit = 'width', poster, lazy = true, playerRef, onTimeUpdate, onPlayingChange, onMarkerPress,
102
112
  className, style,
103
113
  }: ReplayPlayerOptions & { events: ReplayEvent[] }) {
104
114
  const rootRef = useRef<HTMLDivElement>(null)
@@ -107,14 +117,26 @@ export function ReplayPlayer({
107
117
  const meta = useMemo(() => getReplayMeta(events), [events])
108
118
  const track = useMemo(() => getReplayPointerTrack(events), [events])
109
119
  const recorded = useMemo(() => getReplayMarkers(events), [events])
110
- const shown = useMemo(() => {
111
- const list = Array.isArray(markers) ? markers : markers ? recorded : []
112
- return markerKinds ? list.filter((m) => markerKinds.includes(m.kind)) : list
113
- }, [markers, recorded, markerKinds])
114
120
 
121
+ const toolsOn = devtools && !disableDevtools
115
122
  const tools = useMemo(() => getReplayDevtools(events), [events])
116
- const showTools = devtools && (tools.console.length > 0 || tools.network.length > 0)
123
+ const resolved = useMemo(
124
+ () => (toolsOn ? resolveReplayInspections([...getReplayInspections(events), ...(inspections ?? [])], tools) : []),
125
+ [toolsOn, events, inspections, tools],
126
+ )
127
+ const showTools = toolsOn && (tools.console.length > 0 || tools.network.length > 0 || resolved.length > 0)
117
128
  const [panel, setPanel] = useState<ReplayDevtoolsTab | null>(defaultDevtoolsTab ?? null)
129
+ // Whether an inspection (rather than a press) opened the panel: it then leaves focus where it was.
130
+ const [autoOpened, setAutoOpened] = useState(false)
131
+
132
+ const shown = useMemo(() => {
133
+ // Inspections from the prop join the rail as checkpoints (the recording's own are already among `recorded`).
134
+ const own: ReplayMarker[] = toolsOn ? (inspections ?? []).map((inspection, i) => ({
135
+ id: `inspection-${i}`, kind: 'custom', time: Math.max(0, inspection.time), label: inspection.label ?? 'Inspected',
136
+ })) : []
137
+ const list = Array.isArray(markers) ? markers : markers ? [...recorded, ...own].sort((a, b) => a.time - b.time) : []
138
+ return markerKinds ? list.filter((m) => markerKinds.includes(m.kind)) : list
139
+ }, [markers, recorded, markerKinds, inspections, toolsOn])
118
140
 
119
141
  const [visible, setVisible] = useState(!lazy)
120
142
  const [ready, setReady] = useState(false)
@@ -151,12 +173,22 @@ export function ReplayPlayer({
151
173
  return () => clearTimeout(timer)
152
174
  }, [ready, reduced])
153
175
 
176
+ const resolvedRef = useRef(resolved)
177
+ resolvedRef.current = resolved
154
178
  const handle = useMemo<ReplayPreviewHandle>(() => ({
155
179
  play: (offset) => { setFinished(false); stage.current?.play(offset) },
156
180
  pause: (offset) => stage.current?.pause(offset),
157
181
  seek: (ms) => { setFinished(false); stage.current?.seek(ms) },
158
182
  toggle: () => { setFinished(false); stage.current?.toggle() },
159
183
  getCurrentTime: () => stage.current?.getCurrentTime() ?? 0,
184
+ inspect: (id) => {
185
+ const inspection = resolvedRef.current.find((x) => x.id === id)
186
+ if (!inspection) return
187
+ setFinished(false)
188
+ stage.current?.seek(inspection.time)
189
+ setPanel(inspection.tab)
190
+ setAutoOpened(false)
191
+ },
160
192
  }), [])
161
193
  useImperativeHandle(playerRef, () => handle, [handle])
162
194
 
@@ -209,7 +241,23 @@ export function ReplayPlayer({
209
241
  }, [url, meta.href, recorded, time])
210
242
 
211
243
  const toolsState = useMemo(() => replayDevtoolsAt(tools, time), [tools, time])
212
- const openTools = (tab: ReplayDevtoolsTab) => setPanel((p) => (p === tab ? null : tab))
244
+ const openTools = (tab: ReplayDevtoolsTab) => { setAutoOpened(false); setPanel((p) => (p === tab ? null : tab)) }
245
+
246
+ // Inspect mode: the inspection at the playhead opens DevTools on what it found. Only a change of inspection does
247
+ // (closing the panel keeps it closed until the next one); scrubbing back before the first closes what it opened.
248
+ const inspection = showTools ? replayInspectionAt(resolved, time) : undefined
249
+ const inspectionId = inspection?.id
250
+ const inspectionTab = inspection?.tab
251
+ const lastInspection = useRef<string | undefined>(undefined)
252
+ useEffect(() => {
253
+ if (inspectionId === lastInspection.current) return
254
+ const had = lastInspection.current
255
+ lastInspection.current = inspectionId
256
+ if (inspectionTab) {
257
+ setPanel(inspectionTab)
258
+ setAutoOpened(true)
259
+ } else if (had !== undefined && autoOpened) setPanel(null)
260
+ }, [inspectionId, inspectionTab, autoOpened])
213
261
  const toolButtons = showTools ? <DevtoolsButtons state={toolsState} open={panel} onOpen={openTools} /> : null
214
262
 
215
263
  const w = meta.width || 1280
@@ -269,11 +317,12 @@ export function ReplayPlayer({
269
317
  {showTools && panel ? (
270
318
  <DevtoolsPanel
271
319
  state={toolsState}
272
- at={time}
273
320
  tab={panel}
274
321
  onTab={setPanel}
275
322
  onClose={() => { setPanel(null); rootRef.current?.focus({ preventScroll: true }) }}
276
323
  onSeek={(ms) => handle.seek(ms)}
324
+ inspection={inspection}
325
+ autoFocus={!autoOpened}
277
326
  />
278
327
  ) : null}
279
328
 
@@ -17,6 +17,8 @@ export type ReplayConsoleLevel = 'log' | 'info' | 'warn' | 'error' | 'debug'
17
17
  export interface ReplayConsoleEntry {
18
18
  /** Stable id (`console-<n>`). */
19
19
  id: string
20
+ /** The recording's own id for the message (`payload.id` of a custom event), which an inspection can name. */
21
+ key?: string
20
22
  /** Milliseconds from the start of the recording. */
21
23
  time: number
22
24
  level: ReplayConsoleLevel
@@ -33,6 +35,9 @@ export interface ReplayConsoleEntry {
33
35
  export interface ReplayRequest {
34
36
  /** Stable id (`request-<n>`). */
35
37
  id: string
38
+ /** The recording's own id for the request (`id` / `requestId`, e.g. a Replay request id), which an
39
+ * inspection can name. */
40
+ key?: string
36
41
  /** When the request was sent, in ms from the start of the recording. */
37
42
  time: number
38
43
  /** How long it took, when known: the response arrived at `time + duration`. */
@@ -153,6 +158,7 @@ export function getReplayDevtools(events: readonly ReplayEvent[]): ReplayDevtool
153
158
  // request was sent that far before it (its own duration, for a lone request).
154
159
  const sent = Math.max(0, startTime !== undefined && batchEnd !== undefined ? at - (batchEnd - startTime) : at - (duration ?? 0))
155
160
  requests.push({
161
+ key: str(raw.requestId) ?? str(raw.id),
156
162
  time: sent,
157
163
  duration,
158
164
  method: (str(raw.method) ?? 'GET').toUpperCase(),
@@ -197,10 +203,10 @@ export function getReplayDevtools(events: readonly ReplayEvent[]): ReplayDevtool
197
203
  const detail = str(payload.message) ?? str(payload.detail)
198
204
  const message = detail ? `Uncaught ${label}: ${detail}` : `Uncaught ${label}`
199
205
  const trace = Array.isArray(payload.stack) ? payload.stack.map(String) : str(payload.stack)?.split('\n').map((l) => l.trim()).filter(Boolean)
200
- consoleEntries.push({ time, level: 'error', message, args: [message], trace: trace?.length ? trace : undefined, source: 'exception' })
206
+ consoleEntries.push({ key: str(payload.id), time, level: 'error', message, args: [message], trace: trace?.length ? trace : undefined, source: 'exception' })
201
207
  } else if (CONSOLE_TAGS.has(tag)) {
202
208
  const args = Array.isArray(payload.args) ? payload.args.map((a) => asText(a) ?? '') : [str(payload.message) ?? str(payload.label) ?? asText(payload.detail) ?? '']
203
- consoleEntries.push({ time, level: levelOf(payload.level ?? tag), message: args.join(' '), args, source: 'custom' })
209
+ consoleEntries.push({ key: str(payload.id), time, level: levelOf(payload.level ?? tag), message: args.join(' '), args, source: 'custom' })
204
210
  }
205
211
  }
206
212
  }
@@ -18,6 +18,8 @@ export type { ReplayMarker, ReplayMarkerKind, ReplayMeta, ReplayPointerPoint, Re
18
18
  export { getReplayDevtools, replayDevtoolsAt, requestName } from './devtools';
19
19
  export type { ReplayConsoleEntry, ReplayConsoleLevel, ReplayDevtools, ReplayDevtoolsState, ReplayRequest } from './devtools';
20
20
  export type { ReplayDevtoolsTab } from './ReplayDevtools';
21
+ export { getReplayInspections, replayInspectionAt, resolveReplayInspections } from './inspections';
22
+ export type { ReplayInspection, ReplayInspectionTab, ResolvedReplayInspection } from './inspections';
21
23
  export { ReplayEventType, ReplayIncrementalSource, ReplayMouseInteraction } from './types';
22
24
  export type { ReplayEvent } from './types';
23
25
  export { isReplayQaUrl, normalizeReplayEmbedUrl } from './url';