browsertrack 0.0.1 → 0.1.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.
Files changed (101) hide show
  1. package/README.md +143 -0
  2. package/dist/chunk-6A7FFDIB.js +221 -0
  3. package/dist/chunk-6A7FFDIB.js.map +1 -0
  4. package/dist/chunk-ANMR5WBH.js +659 -0
  5. package/dist/chunk-ANMR5WBH.js.map +1 -0
  6. package/dist/chunk-BSKNG4V7.js +1199 -0
  7. package/dist/chunk-BSKNG4V7.js.map +1 -0
  8. package/dist/chunk-X7C5CHBO.js +2080 -0
  9. package/dist/chunk-X7C5CHBO.js.map +1 -0
  10. package/dist/chunk-ZLNGOOH2.js +554 -0
  11. package/dist/chunk-ZLNGOOH2.js.map +1 -0
  12. package/dist/cli/index.js +2829 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/client/index.cjs +2218 -0
  15. package/dist/client/index.d.ts +197 -0
  16. package/dist/client/index.js +20 -0
  17. package/dist/client/index.js.map +1 -0
  18. package/dist/client.iife.js +309 -0
  19. package/dist/core/index.d.ts +78 -0
  20. package/dist/core/index.js +31 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/daemon/index.d.ts +58 -0
  23. package/dist/daemon/index.js +32 -0
  24. package/dist/daemon/index.js.map +1 -0
  25. package/dist/engine-DKloFjvs.d.ts +157 -0
  26. package/dist/index.d.ts +10 -0
  27. package/dist/index.js +50 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp/index.d.ts +11 -0
  30. package/dist/mcp/index.js +12 -0
  31. package/dist/mcp/index.js.map +1 -0
  32. package/dist/notes-CBvN91Wf.d.ts +260 -0
  33. package/dist/projects-CY8ungMt.d.ts +99 -0
  34. package/dist/server-CN-se8td.d.ts +55 -0
  35. package/examples/test-app/index.html +299 -0
  36. package/package.json +52 -7
  37. package/packages/cli/src/index.ts +413 -0
  38. package/packages/client/package.json +28 -0
  39. package/packages/client/src/breadcrumbs.ts +30 -0
  40. package/packages/client/src/client.ts +278 -0
  41. package/packages/client/src/commands/handler.ts +301 -0
  42. package/packages/client/src/config.ts +37 -0
  43. package/packages/client/src/index.ts +50 -0
  44. package/packages/client/src/interceptors/console.ts +68 -0
  45. package/packages/client/src/interceptors/interaction.ts +119 -0
  46. package/packages/client/src/interceptors/navigation.ts +93 -0
  47. package/packages/client/src/interceptors/network.ts +165 -0
  48. package/packages/client/src/interceptors/runtime.ts +65 -0
  49. package/packages/client/src/notes/inspector.ts +943 -0
  50. package/packages/client/src/screenshot/browser-script-driver.ts +192 -0
  51. package/packages/client/src/screenshot/driver.ts +14 -0
  52. package/packages/client/src/transport/websocket.ts +179 -0
  53. package/packages/client/tsconfig.json +8 -0
  54. package/packages/core/dist/index.d.ts +317 -0
  55. package/packages/core/dist/index.js +221 -0
  56. package/packages/core/package.json +23 -0
  57. package/packages/core/src/fingerprint.ts +120 -0
  58. package/packages/core/src/index.ts +9 -0
  59. package/packages/core/src/redaction.ts +139 -0
  60. package/packages/core/src/selector.ts +77 -0
  61. package/packages/core/src/types/commands.ts +101 -0
  62. package/packages/core/src/types/events.ts +108 -0
  63. package/packages/core/src/types/incidents.ts +54 -0
  64. package/packages/core/src/types/notes.ts +106 -0
  65. package/packages/core/src/types/probes.ts +44 -0
  66. package/packages/core/src/types/projects.ts +20 -0
  67. package/packages/core/tsconfig.json +8 -0
  68. package/packages/daemon/src/config.ts +29 -0
  69. package/packages/daemon/src/incidents/engine.ts +211 -0
  70. package/packages/daemon/src/index.ts +18 -0
  71. package/packages/daemon/src/notes/engine.ts +92 -0
  72. package/packages/daemon/src/notes/verification.ts +191 -0
  73. package/packages/daemon/src/server/daemon.ts +112 -0
  74. package/packages/daemon/src/server/http.ts +165 -0
  75. package/packages/daemon/src/server/ws.ts +175 -0
  76. package/packages/daemon/src/session/manager.ts +126 -0
  77. package/packages/daemon/src/storage/db.ts +733 -0
  78. package/packages/daemon/src/storage/screenshot-store.ts +49 -0
  79. package/packages/daemon/src/verification/engine.ts +264 -0
  80. package/packages/mcp/src/handlers.ts +398 -0
  81. package/packages/mcp/src/index.ts +3 -0
  82. package/packages/mcp/src/server.ts +86 -0
  83. package/packages/mcp/src/tools.ts +236 -0
  84. package/src/index.ts +4 -0
  85. package/test/client/interceptors.test.ts +69 -0
  86. package/test/core/fingerprint.test.ts +53 -0
  87. package/test/core/notes.test.ts +66 -0
  88. package/test/core/redaction.test.ts +48 -0
  89. package/test/daemon/incident-engine.test.ts +98 -0
  90. package/test/daemon/notes-storage.test.ts +130 -0
  91. package/test/daemon/notes-verification.test.ts +135 -0
  92. package/test/daemon/storage.test.ts +123 -0
  93. package/test/daemon/verification-engine.test.ts +88 -0
  94. package/test/e2e/daemon-mcp-e2e.test.ts +153 -0
  95. package/test/e2e/visual-notes-e2e.test.ts +205 -0
  96. package/test/mcp/handlers.test.ts +116 -0
  97. package/test/mcp/notes.test.ts +107 -0
  98. package/tsconfig.base.json +17 -0
  99. package/tsconfig.json +26 -0
  100. package/tsup.config.ts +54 -0
  101. package/vitest.config.ts +9 -0
@@ -0,0 +1,260 @@
1
+ type EventType = 'runtime_error' | 'unhandled_rejection' | 'console' | 'fetch' | 'xhr' | 'navigation' | 'interaction';
2
+ type ConsoleLevel = 'error' | 'warn' | 'info' | 'log' | 'debug';
3
+ interface ElementSummary {
4
+ selector: string;
5
+ tag: string;
6
+ id?: string;
7
+ classes?: string[];
8
+ attributes?: Record<string, string>;
9
+ outerHTML?: string;
10
+ innerText?: string;
11
+ boundingRect?: {
12
+ x: number;
13
+ y: number;
14
+ width: number;
15
+ height: number;
16
+ top: number;
17
+ left: number;
18
+ bottom: number;
19
+ right: number;
20
+ };
21
+ visible: boolean;
22
+ }
23
+ interface Breadcrumb {
24
+ id?: string;
25
+ type: 'navigation' | 'click' | 'submit' | 'fetch' | 'xhr' | 'console' | 'error';
26
+ category?: string;
27
+ message: string;
28
+ timestamp: number;
29
+ level?: 'info' | 'warn' | 'error';
30
+ data?: Record<string, any>;
31
+ element?: ElementSummary;
32
+ }
33
+ interface NetworkEvent {
34
+ id?: string;
35
+ url: string;
36
+ method: string;
37
+ status?: number;
38
+ statusText?: string;
39
+ durationMs: number;
40
+ error?: string;
41
+ aborted?: boolean;
42
+ timestamp: number;
43
+ requestHeaders?: Record<string, string>;
44
+ }
45
+ interface RuntimeErrorEvent {
46
+ message: string;
47
+ stack?: string;
48
+ filename?: string;
49
+ lineno?: number;
50
+ colno?: number;
51
+ errorType: string;
52
+ timestamp: number;
53
+ }
54
+ interface ConsoleEvent {
55
+ level: ConsoleLevel;
56
+ message: string;
57
+ args?: any[];
58
+ stack?: string;
59
+ timestamp: number;
60
+ }
61
+ interface NavigationEvent {
62
+ from?: string;
63
+ to: string;
64
+ type: 'pushState' | 'replaceState' | 'popstate' | 'hashchange' | 'initial';
65
+ timestamp: number;
66
+ }
67
+ interface HelloMessage {
68
+ type: 'hello';
69
+ origin: string;
70
+ url: string;
71
+ title: string;
72
+ userAgent: string;
73
+ timestamp: number;
74
+ projectId?: string;
75
+ }
76
+ interface ClientEventMessage {
77
+ type: 'event';
78
+ sessionId: string;
79
+ eventType: EventType;
80
+ payload: RuntimeErrorEvent | ConsoleEvent | NetworkEvent | NavigationEvent | Breadcrumb;
81
+ breadcrumbs?: Breadcrumb[];
82
+ lastElement?: ElementSummary;
83
+ route?: string;
84
+ url: string;
85
+ title?: string;
86
+ timestamp: number;
87
+ }
88
+
89
+ type CommandType = 'reload' | 'navigate' | 'get_page_state' | 'query_element' | 'capture_element' | 'check_overflow' | 'get_element_rect' | 'get_element_style';
90
+ interface ClientCommand<T = any> {
91
+ id: string;
92
+ type: CommandType;
93
+ params?: T;
94
+ }
95
+ interface ReloadParams {
96
+ force?: boolean;
97
+ }
98
+ interface NavigateParams {
99
+ url: string;
100
+ }
101
+ interface QueryElementParams {
102
+ selector: string;
103
+ }
104
+ interface CaptureElementParams {
105
+ selector?: string;
106
+ }
107
+ interface QueryElementResult {
108
+ exists: boolean;
109
+ visible?: boolean;
110
+ tag?: string;
111
+ id?: string;
112
+ classes?: string[];
113
+ boundingRect?: {
114
+ x: number;
115
+ y: number;
116
+ width: number;
117
+ height: number;
118
+ top: number;
119
+ left: number;
120
+ bottom: number;
121
+ right: number;
122
+ };
123
+ innerText?: string;
124
+ outerHTML?: string;
125
+ }
126
+ interface PageStateResult {
127
+ url: string;
128
+ route: string;
129
+ title: string;
130
+ readyState: string;
131
+ activeElement?: ElementSummary;
132
+ }
133
+ interface CaptureElementResult {
134
+ dataUrl?: string;
135
+ format?: string;
136
+ width?: number;
137
+ height?: number;
138
+ }
139
+ interface OverflowCheckResult {
140
+ selector: string;
141
+ overflow: boolean;
142
+ viewportWidth: number;
143
+ viewportHeight: number;
144
+ rect?: {
145
+ x: number;
146
+ y: number;
147
+ width: number;
148
+ height: number;
149
+ top: number;
150
+ left: number;
151
+ bottom: number;
152
+ right: number;
153
+ };
154
+ overflowRightPx: number;
155
+ overflowBottomPx: number;
156
+ parentOverflow?: boolean;
157
+ }
158
+ interface ElementStyleResult {
159
+ selector: string;
160
+ styles: Record<string, string>;
161
+ }
162
+ interface CommandResponse<T = any> {
163
+ id: string;
164
+ ok: boolean;
165
+ result?: T;
166
+ error?: string;
167
+ reason?: string;
168
+ }
169
+
170
+ type NoteType = 'element' | 'region' | 'page';
171
+ type NoteStatus = 'OPEN' | 'IN_PROGRESS' | 'VERIFYING' | 'READY_FOR_REVIEW' | 'VERIFIED' | 'RESOLVED' | 'FAILED' | 'INCONCLUSIVE';
172
+ interface ViewportContext {
173
+ width: number;
174
+ height: number;
175
+ devicePixelRatio: number;
176
+ }
177
+ interface ScrollContext {
178
+ scrollX: number;
179
+ scrollY: number;
180
+ }
181
+ interface DOMRectJson {
182
+ x: number;
183
+ y: number;
184
+ width: number;
185
+ height: number;
186
+ top: number;
187
+ left: number;
188
+ bottom: number;
189
+ right: number;
190
+ }
191
+ interface NoteTarget {
192
+ selector: string;
193
+ boundingRect: DOMRectJson;
194
+ visible: boolean;
195
+ confidence?: 'high' | 'medium' | 'low';
196
+ }
197
+ interface ElementContext {
198
+ selector: string;
199
+ tag: string;
200
+ attributes?: Record<string, string>;
201
+ outerHTML?: string;
202
+ innerText?: string;
203
+ parent?: {
204
+ selector: string;
205
+ tag: string;
206
+ };
207
+ }
208
+ interface RegionContext {
209
+ x: number;
210
+ y: number;
211
+ width: number;
212
+ height: number;
213
+ }
214
+ interface VisualNote {
215
+ id: string;
216
+ projectId: string;
217
+ sessionId: string;
218
+ type: NoteType;
219
+ message: string;
220
+ route: string;
221
+ url: string;
222
+ viewport: ViewportContext;
223
+ scroll: ScrollContext;
224
+ target?: NoteTarget;
225
+ elementContext?: ElementContext;
226
+ region?: RegionContext;
227
+ status: NoteStatus;
228
+ incidentId?: string;
229
+ screenshots?: {
230
+ original?: string;
231
+ after?: string;
232
+ };
233
+ createdAt: string;
234
+ updatedAt: string;
235
+ resolvedAt?: string;
236
+ }
237
+ interface NoteVerificationResult {
238
+ noteId: string;
239
+ status: NoteStatus;
240
+ checks: Array<{
241
+ type: string;
242
+ passed: boolean;
243
+ details?: string;
244
+ }>;
245
+ geometryDiff?: {
246
+ before?: DOMRectJson;
247
+ current?: DOMRectJson;
248
+ viewportWidth?: number;
249
+ overflowFixed?: boolean;
250
+ overflowPx?: number;
251
+ };
252
+ screenshots?: {
253
+ before?: string;
254
+ after?: string;
255
+ };
256
+ timestamp: string;
257
+ message?: string;
258
+ }
259
+
260
+ export type { Breadcrumb as B, CaptureElementParams as C, DOMRectJson as D, ElementContext as E, HelloMessage as H, NavigateParams as N, OverflowCheckResult as O, PageStateResult as P, QueryElementParams as Q, RegionContext as R, ScrollContext as S, ViewportContext as V, CaptureElementResult as a, ClientCommand as b, ClientEventMessage as c, CommandResponse as d, CommandType as e, ConsoleEvent as f, ConsoleLevel as g, ElementStyleResult as h, ElementSummary as i, EventType as j, NavigationEvent as k, NetworkEvent as l, NoteStatus as m, NoteTarget as n, NoteType as o, NoteVerificationResult as p, QueryElementResult as q, ReloadParams as r, RuntimeErrorEvent as s, VisualNote as t };
@@ -0,0 +1,99 @@
1
+ import { B as Breadcrumb, l as NetworkEvent, i as ElementSummary } from './notes-CBvN91Wf.js';
2
+
3
+ type IncidentStatus = 'OPEN' | 'FIX_ATTEMPTED' | 'VERIFYING' | 'VERIFIED' | 'FAILED' | 'INCONCLUSIVE';
4
+ type IncidentSeverity = 'error' | 'warn' | 'fatal';
5
+ interface IncidentSource {
6
+ file: string;
7
+ line: number;
8
+ column?: number;
9
+ }
10
+ interface Incident {
11
+ id: string;
12
+ projectId: string;
13
+ sessionId: string;
14
+ type: string;
15
+ severity: IncidentSeverity;
16
+ message: string;
17
+ source: IncidentSource;
18
+ fingerprint: string;
19
+ route: string;
20
+ firstSeen: string;
21
+ lastSeen: string;
22
+ occurrences: number;
23
+ status: IncidentStatus;
24
+ stack?: string;
25
+ breadcrumbs: Breadcrumb[];
26
+ networkFailures: NetworkEvent[];
27
+ lastElement?: ElementSummary;
28
+ screenshots?: {
29
+ error?: string;
30
+ before?: string;
31
+ after?: string;
32
+ };
33
+ }
34
+ interface IncidentOccurrence {
35
+ id: string;
36
+ incidentId: string;
37
+ sessionId: string;
38
+ timestamp: string;
39
+ route: string;
40
+ url: string;
41
+ stack?: string;
42
+ breadcrumbs: Breadcrumb[];
43
+ lastElement?: ElementSummary;
44
+ }
45
+
46
+ type ProbeType = 'element_exists' | 'element_visible' | 'text_contains' | 'route_is' | 'network_request_succeeded' | 'no_incident';
47
+ interface VerificationProbe {
48
+ type: ProbeType;
49
+ selector?: string;
50
+ text?: string;
51
+ route?: string;
52
+ fingerprint?: string;
53
+ urlPattern?: string;
54
+ timeoutMs?: number;
55
+ }
56
+ interface VerificationRecipe {
57
+ route?: string;
58
+ targetSelector?: string;
59
+ expect?: VerificationProbe[];
60
+ observationWindowMs?: number;
61
+ }
62
+ interface ProbeResult {
63
+ type: ProbeType;
64
+ passed: boolean;
65
+ details?: string;
66
+ }
67
+ interface VerificationResult {
68
+ incidentId: string;
69
+ status: IncidentStatus;
70
+ checks: ProbeResult[];
71
+ screenshots?: {
72
+ before?: string;
73
+ after?: string;
74
+ };
75
+ timestamp: string;
76
+ message?: string;
77
+ }
78
+
79
+ interface Project {
80
+ id: string;
81
+ name: string;
82
+ origin: string;
83
+ path?: string;
84
+ createdAt: string;
85
+ updatedAt: string;
86
+ }
87
+ interface Session {
88
+ id: string;
89
+ projectId: string;
90
+ origin: string;
91
+ url: string;
92
+ title: string;
93
+ userAgent: string;
94
+ connectedAt: string;
95
+ lastSeenAt: string;
96
+ active: boolean;
97
+ }
98
+
99
+ export type { Incident as I, ProbeResult as P, Session as S, VerificationProbe as V, IncidentOccurrence as a, IncidentSeverity as b, IncidentSource as c, IncidentStatus as d, ProbeType as e, Project as f, VerificationRecipe as g, VerificationResult as h };
@@ -0,0 +1,55 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { S as StorageDB, a as SessionManager, V as VerificationEngine, N as NoteVerificationEngine } from './engine-DKloFjvs.js';
3
+
4
+ interface McpContext {
5
+ db: StorageDB;
6
+ sessionManager?: SessionManager;
7
+ verificationEngine?: VerificationEngine;
8
+ noteVerificationEngine?: NoteVerificationEngine;
9
+ daemonUrl?: string;
10
+ }
11
+ declare function handleToolCall(name: string, args: any, ctx: McpContext): Promise<any>;
12
+
13
+ interface McpServerOptions {
14
+ dbPath?: string;
15
+ context?: Partial<McpContext>;
16
+ }
17
+ declare function createMcpServer(options?: McpServerOptions): {
18
+ server: Server<{
19
+ method: string;
20
+ params?: {
21
+ [x: string]: unknown;
22
+ _meta?: {
23
+ [x: string]: unknown;
24
+ progressToken?: string | number | undefined;
25
+ "io.modelcontextprotocol/related-task"?: {
26
+ taskId: string;
27
+ } | undefined;
28
+ } | undefined;
29
+ } | undefined;
30
+ }, {
31
+ method: string;
32
+ params?: {
33
+ [x: string]: unknown;
34
+ _meta?: {
35
+ [x: string]: unknown;
36
+ progressToken?: string | number | undefined;
37
+ "io.modelcontextprotocol/related-task"?: {
38
+ taskId: string;
39
+ } | undefined;
40
+ } | undefined;
41
+ } | undefined;
42
+ }, {
43
+ [x: string]: unknown;
44
+ _meta?: {
45
+ [x: string]: unknown;
46
+ progressToken?: string | number | undefined;
47
+ "io.modelcontextprotocol/related-task"?: {
48
+ taskId: string;
49
+ } | undefined;
50
+ } | undefined;
51
+ }>;
52
+ startStdio(): Promise<void>;
53
+ };
54
+
55
+ export { type McpContext as M, type McpServerOptions as a, createMcpServer as c, handleToolCall as h };