browsertrack 0.0.1 → 0.1.1
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/.github/workflows/docs.yml +54 -0
- package/AGENTS.md +133 -0
- package/README.md +143 -0
- package/dist/chunk-6VA7GBAO.js +246 -0
- package/dist/chunk-6VA7GBAO.js.map +1 -0
- package/dist/chunk-G2Y3CXCY.js +659 -0
- package/dist/chunk-G2Y3CXCY.js.map +1 -0
- package/dist/chunk-ILRYKMME.js +1228 -0
- package/dist/chunk-ILRYKMME.js.map +1 -0
- package/dist/chunk-SKCMT2DE.js +2641 -0
- package/dist/chunk-SKCMT2DE.js.map +1 -0
- package/dist/chunk-SPCIROIU.js +616 -0
- package/dist/chunk-SPCIROIU.js.map +1 -0
- package/dist/cli/index.js +2942 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client/index.cjs +2780 -0
- package/dist/client/index.d.ts +211 -0
- package/dist/client/index.js +20 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client.iife.js +630 -0
- package/dist/core/index.d.ts +86 -0
- package/dist/core/index.js +37 -0
- package/dist/core/index.js.map +1 -0
- package/dist/daemon/index.d.ts +58 -0
- package/dist/daemon/index.js +32 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/engine-CeT9URuN.d.ts +161 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +11 -0
- package/dist/mcp/index.js +12 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/notes-CBvN91Wf.d.ts +260 -0
- package/dist/projects-CY8ungMt.d.ts +99 -0
- package/dist/server-Dd8NX2Mk.d.ts +55 -0
- package/docboot.config.js +16 -0
- package/docs/cli.md +51 -0
- package/docs/closed-loop-verification.md +57 -0
- package/docs/getting-started.md +122 -0
- package/docs/incidents-diagnostics.md +61 -0
- package/docs/index.md +46 -0
- package/docs/mcp-reference.md +128 -0
- package/docs/security-privacy.md +32 -0
- package/docs/visual-notes.md +67 -0
- package/examples/test-app/index.html +299 -0
- package/package.json +56 -7
- package/packages/cli/src/index.ts +413 -0
- package/packages/client/package.json +28 -0
- package/packages/client/src/breadcrumbs.ts +30 -0
- package/packages/client/src/client.ts +278 -0
- package/packages/client/src/commands/handler.ts +301 -0
- package/packages/client/src/config.ts +37 -0
- package/packages/client/src/index.ts +50 -0
- package/packages/client/src/interceptors/console.ts +68 -0
- package/packages/client/src/interceptors/interaction.ts +119 -0
- package/packages/client/src/interceptors/navigation.ts +93 -0
- package/packages/client/src/interceptors/network.ts +165 -0
- package/packages/client/src/interceptors/runtime.ts +65 -0
- package/packages/client/src/notes/inspector.ts +1553 -0
- package/packages/client/src/screenshot/browser-script-driver.ts +192 -0
- package/packages/client/src/screenshot/driver.ts +14 -0
- package/packages/client/src/transport/websocket.ts +194 -0
- package/packages/client/tsconfig.json +8 -0
- package/packages/core/package.json +26 -0
- package/packages/core/src/fingerprint.ts +120 -0
- package/packages/core/src/index.ts +9 -0
- package/packages/core/src/redaction.ts +174 -0
- package/packages/core/src/selector.ts +77 -0
- package/packages/core/src/types/commands.ts +101 -0
- package/packages/core/src/types/events.ts +108 -0
- package/packages/core/src/types/incidents.ts +54 -0
- package/packages/core/src/types/notes.ts +106 -0
- package/packages/core/src/types/probes.ts +44 -0
- package/packages/core/src/types/projects.ts +20 -0
- package/packages/core/tsconfig.json +8 -0
- package/packages/daemon/src/config.ts +29 -0
- package/packages/daemon/src/incidents/engine.ts +211 -0
- package/packages/daemon/src/index.ts +18 -0
- package/packages/daemon/src/notes/engine.ts +92 -0
- package/packages/daemon/src/notes/verification.ts +191 -0
- package/packages/daemon/src/server/daemon.ts +112 -0
- package/packages/daemon/src/server/http.ts +165 -0
- package/packages/daemon/src/server/ws.ts +246 -0
- package/packages/daemon/src/session/manager.ts +147 -0
- package/packages/daemon/src/storage/db.ts +742 -0
- package/packages/daemon/src/storage/screenshot-store.ts +49 -0
- package/packages/daemon/src/verification/engine.ts +264 -0
- package/packages/mcp/src/handlers.ts +398 -0
- package/packages/mcp/src/index.ts +3 -0
- package/packages/mcp/src/server.ts +86 -0
- package/packages/mcp/src/tools.ts +236 -0
- package/src/index.ts +4 -0
- package/test/client/interceptors.test.ts +130 -0
- package/test/core/fingerprint.test.ts +53 -0
- package/test/core/notes.test.ts +66 -0
- package/test/core/redaction.test.ts +60 -0
- package/test/daemon/incident-engine.test.ts +98 -0
- package/test/daemon/notes-storage.test.ts +130 -0
- package/test/daemon/notes-verification.test.ts +135 -0
- package/test/daemon/storage.test.ts +123 -0
- package/test/daemon/verification-engine.test.ts +88 -0
- package/test/e2e/daemon-mcp-e2e.test.ts +153 -0
- package/test/e2e/visual-notes-e2e.test.ts +205 -0
- package/test/mcp/handlers.test.ts +116 -0
- package/test/mcp/notes.test.ts +107 -0
- package/tsconfig.base.json +17 -0
- package/tsconfig.json +26 -0
- package/tsup.config.ts +54 -0
- package/vitest.config.ts +9 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export { B as Breadcrumb, C as CaptureElementParams, a as CaptureElementResult, b as ClientCommand, c as ClientEventMessage, d as CommandResponse, e as CommandType, f as ConsoleEvent, g as ConsoleLevel, D as DOMRectJson, E as ElementContext, h as ElementStyleResult, i as ElementSummary, j as EventType, H as HelloMessage, N as NavigateParams, k as NavigationEvent, l as NetworkEvent, m as NoteStatus, n as NoteTarget, o as NoteType, p as NoteVerificationResult, O as OverflowCheckResult, P as PageStateResult, Q as QueryElementParams, q as QueryElementResult, R as RegionContext, r as ReloadParams, s as RuntimeErrorEvent, S as ScrollContext, V as ViewportContext, t as VisualNote } from '../notes-CBvN91Wf.js';
|
|
2
|
+
export { I as Incident, a as IncidentOccurrence, b as IncidentSeverity, c as IncidentSource, d as IncidentStatus, P as ProbeResult, e as ProbeType, f as Project, S as Session, V as VerificationProbe, g as VerificationRecipe, h as VerificationResult } from '../projects-CY8ungMt.js';
|
|
3
|
+
import { Rules } from '@visulima/redact';
|
|
4
|
+
export { Rules, standardRules, redact as visulimaRedact } from '@visulima/redact';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Error fingerprinting and normalization utilities
|
|
8
|
+
*/
|
|
9
|
+
interface FingerprintInput {
|
|
10
|
+
type: string;
|
|
11
|
+
message: string;
|
|
12
|
+
sourceFile?: string;
|
|
13
|
+
line?: number;
|
|
14
|
+
column?: number;
|
|
15
|
+
stack?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Normalizes error messages by stripping dynamic content like UUIDs, timestamps,
|
|
19
|
+
* hex addresses, and file timestamps.
|
|
20
|
+
*/
|
|
21
|
+
declare function normalizeErrorMessage(message: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Normalizes source filenames by removing origin and cache-busting query strings.
|
|
24
|
+
*/
|
|
25
|
+
declare function normalizeSourceFile(filename?: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Extracts source location from stack if not explicitly provided
|
|
28
|
+
*/
|
|
29
|
+
declare function extractSourceFromStack(stack?: string): {
|
|
30
|
+
file: string;
|
|
31
|
+
line: number;
|
|
32
|
+
column?: number;
|
|
33
|
+
} | null;
|
|
34
|
+
/**
|
|
35
|
+
* Computes a deterministic fingerprint for an error
|
|
36
|
+
*/
|
|
37
|
+
declare function computeFingerprint(input: FingerprintInput): string;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Security and Redaction Utilities powered by @visulima/redact
|
|
41
|
+
*/
|
|
42
|
+
declare const REDACTED_PLACEHOLDER = "[REDACTED]";
|
|
43
|
+
declare const SENSITIVE_KEY_PATTERNS: RegExp[];
|
|
44
|
+
declare const SENSITIVE_QUERY_PARAMS: string[];
|
|
45
|
+
/**
|
|
46
|
+
* Developer security rules for @visulima/redact
|
|
47
|
+
*/
|
|
48
|
+
declare const BROWSER_SECURITY_RULES: Rules;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Checks if a property name matches any sensitive pattern
|
|
52
|
+
*/
|
|
53
|
+
declare function isSensitiveKey(key: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Redacts sensitive query parameters from a URL string
|
|
56
|
+
*/
|
|
57
|
+
declare function redactUrl(rawUrl: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Redacts sensitive HTTP headers
|
|
60
|
+
*/
|
|
61
|
+
declare function redactHeaders(headers: Record<string, string>): Record<string, string>;
|
|
62
|
+
/**
|
|
63
|
+
* Deeply redacts sensitive keys and payload data from an object or array,
|
|
64
|
+
* leveraging @visulima/redact rules combined with BrowserTrack URL/header sanitizers.
|
|
65
|
+
*/
|
|
66
|
+
declare function redactSensitiveData<T = any>(data: T, maxDepth?: number, currentDepth?: number): T;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Semantic element selector generation and inspection
|
|
70
|
+
*/
|
|
71
|
+
interface SelectorOptions {
|
|
72
|
+
maxClasses?: number;
|
|
73
|
+
maxOuterHTMLLength?: number;
|
|
74
|
+
maxInnerTextLength?: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Builds a clean, human-readable semantic selector for a DOM element.
|
|
78
|
+
* Prioritizes data-testid/data-test, id, semantic tag + specific class, or concise parent path.
|
|
79
|
+
*/
|
|
80
|
+
declare function getSemanticSelector(element: HTMLElement | Element, options?: SelectorOptions): string;
|
|
81
|
+
/**
|
|
82
|
+
* Truncates string to specified max length with ellipsis
|
|
83
|
+
*/
|
|
84
|
+
declare function truncate(str: string | undefined | null, maxLength?: number): string;
|
|
85
|
+
|
|
86
|
+
export { BROWSER_SECURITY_RULES, type FingerprintInput, REDACTED_PLACEHOLDER, SENSITIVE_KEY_PATTERNS, SENSITIVE_QUERY_PARAMS, type SelectorOptions, computeFingerprint, extractSourceFromStack, getSemanticSelector, isSensitiveKey, normalizeErrorMessage, normalizeSourceFile, redactHeaders, redactSensitiveData, redactUrl, truncate };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BROWSER_SECURITY_RULES,
|
|
3
|
+
REDACTED_PLACEHOLDER,
|
|
4
|
+
SENSITIVE_KEY_PATTERNS,
|
|
5
|
+
SENSITIVE_QUERY_PARAMS,
|
|
6
|
+
computeFingerprint,
|
|
7
|
+
extractSourceFromStack,
|
|
8
|
+
getSemanticSelector,
|
|
9
|
+
isSensitiveKey,
|
|
10
|
+
normalizeErrorMessage,
|
|
11
|
+
normalizeSourceFile,
|
|
12
|
+
redactHeaders,
|
|
13
|
+
redactSensitiveData,
|
|
14
|
+
redactUrl,
|
|
15
|
+
standardRules,
|
|
16
|
+
truncate,
|
|
17
|
+
visulimaRedact
|
|
18
|
+
} from "../chunk-6VA7GBAO.js";
|
|
19
|
+
export {
|
|
20
|
+
BROWSER_SECURITY_RULES,
|
|
21
|
+
REDACTED_PLACEHOLDER,
|
|
22
|
+
SENSITIVE_KEY_PATTERNS,
|
|
23
|
+
SENSITIVE_QUERY_PARAMS,
|
|
24
|
+
computeFingerprint,
|
|
25
|
+
extractSourceFromStack,
|
|
26
|
+
getSemanticSelector,
|
|
27
|
+
isSensitiveKey,
|
|
28
|
+
normalizeErrorMessage,
|
|
29
|
+
normalizeSourceFile,
|
|
30
|
+
redactHeaders,
|
|
31
|
+
redactSensitiveData,
|
|
32
|
+
redactUrl,
|
|
33
|
+
standardRules,
|
|
34
|
+
truncate,
|
|
35
|
+
visulimaRedact
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { S as StorageDB, b as ScreenshotStore, a as SessionManager, c as NotesEngine, V as VerificationEngine, N as NoteVerificationEngine } from '../engine-CeT9URuN.js';
|
|
2
|
+
import { c as ClientEventMessage } from '../notes-CBvN91Wf.js';
|
|
3
|
+
import { I as Incident } from '../projects-CY8ungMt.js';
|
|
4
|
+
import http from 'node:http';
|
|
5
|
+
import { WebSocketServer } from 'ws';
|
|
6
|
+
|
|
7
|
+
interface DaemonConfig {
|
|
8
|
+
host: string;
|
|
9
|
+
port: number;
|
|
10
|
+
dataDir: string;
|
|
11
|
+
dbPath: string;
|
|
12
|
+
screenshotsDir: string;
|
|
13
|
+
maxEventsPerSession: number;
|
|
14
|
+
verbose: boolean;
|
|
15
|
+
}
|
|
16
|
+
declare function getDaemonConfig(overrides?: Partial<DaemonConfig>): DaemonConfig;
|
|
17
|
+
|
|
18
|
+
declare class IncidentEngine {
|
|
19
|
+
private db;
|
|
20
|
+
private screenshotStore;
|
|
21
|
+
constructor(db: StorageDB, screenshotStore: ScreenshotStore);
|
|
22
|
+
processClientEvent(message: ClientEventMessage & {
|
|
23
|
+
screenshot?: string;
|
|
24
|
+
}): Incident | null;
|
|
25
|
+
private handleErrorEvent;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare function createHttpHandler(db: StorageDB, sessionManager: SessionManager, baseScreenshotsDir: string): (req: http.IncomingMessage, res: http.ServerResponse) => void;
|
|
29
|
+
|
|
30
|
+
declare function setupWebSocketServer(wss: WebSocketServer, db: StorageDB, sessionManager: SessionManager, incidentEngine: IncidentEngine, notesEngine?: NotesEngine, maxEventsPerSession?: number, verbose?: boolean): void;
|
|
31
|
+
|
|
32
|
+
declare class BrowserTrackDaemon {
|
|
33
|
+
config: DaemonConfig;
|
|
34
|
+
db: StorageDB;
|
|
35
|
+
screenshotStore: ScreenshotStore;
|
|
36
|
+
sessionManager: SessionManager;
|
|
37
|
+
incidentEngine: IncidentEngine;
|
|
38
|
+
notesEngine: NotesEngine;
|
|
39
|
+
verificationEngine: VerificationEngine;
|
|
40
|
+
noteVerificationEngine: NoteVerificationEngine;
|
|
41
|
+
private httpServer;
|
|
42
|
+
private wss;
|
|
43
|
+
private isRunning;
|
|
44
|
+
constructor(config?: Partial<DaemonConfig>);
|
|
45
|
+
start(): Promise<void>;
|
|
46
|
+
stop(): Promise<void>;
|
|
47
|
+
getStatus(): {
|
|
48
|
+
isRunning: boolean;
|
|
49
|
+
host: string;
|
|
50
|
+
port: number;
|
|
51
|
+
activeSessions: number;
|
|
52
|
+
dbPath: string;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
declare function createDaemon(config?: Partial<DaemonConfig>): BrowserTrackDaemon;
|
|
57
|
+
|
|
58
|
+
export { BrowserTrackDaemon, type DaemonConfig, IncidentEngine, NoteVerificationEngine, NotesEngine, ScreenshotStore, SessionManager, StorageDB, VerificationEngine, createDaemon, createHttpHandler, getDaemonConfig, setupWebSocketServer };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BrowserTrackDaemon,
|
|
3
|
+
IncidentEngine,
|
|
4
|
+
createDaemon,
|
|
5
|
+
createHttpHandler,
|
|
6
|
+
setupWebSocketServer
|
|
7
|
+
} from "../chunk-SPCIROIU.js";
|
|
8
|
+
import "../chunk-6VA7GBAO.js";
|
|
9
|
+
import {
|
|
10
|
+
NoteVerificationEngine,
|
|
11
|
+
NotesEngine,
|
|
12
|
+
ScreenshotStore,
|
|
13
|
+
SessionManager,
|
|
14
|
+
StorageDB,
|
|
15
|
+
VerificationEngine,
|
|
16
|
+
getDaemonConfig
|
|
17
|
+
} from "../chunk-ILRYKMME.js";
|
|
18
|
+
export {
|
|
19
|
+
BrowserTrackDaemon,
|
|
20
|
+
IncidentEngine,
|
|
21
|
+
NoteVerificationEngine,
|
|
22
|
+
NotesEngine,
|
|
23
|
+
ScreenshotStore,
|
|
24
|
+
SessionManager,
|
|
25
|
+
StorageDB,
|
|
26
|
+
VerificationEngine,
|
|
27
|
+
createDaemon,
|
|
28
|
+
createHttpHandler,
|
|
29
|
+
getDaemonConfig,
|
|
30
|
+
setupWebSocketServer
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { B as Breadcrumb, i as ElementSummary, t as VisualNote, m as NoteStatus, p as NoteVerificationResult, d as CommandResponse, b as ClientCommand } from './notes-CBvN91Wf.js';
|
|
2
|
+
import { f as Project, S as Session, I as Incident, d as IncidentStatus, b as IncidentSeverity, a as IncidentOccurrence, h as VerificationResult, g as VerificationRecipe } from './projects-CY8ungMt.js';
|
|
3
|
+
import { WebSocket } from 'ws';
|
|
4
|
+
|
|
5
|
+
declare class StorageDB {
|
|
6
|
+
private db;
|
|
7
|
+
constructor(dbPath: string);
|
|
8
|
+
private initTables;
|
|
9
|
+
upsertProject(project: {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
origin: string;
|
|
13
|
+
path?: string;
|
|
14
|
+
}): Project;
|
|
15
|
+
getProject(idOrName: string): Project | null;
|
|
16
|
+
getProjectByOrigin(origin: string): Project | null;
|
|
17
|
+
listProjects(): Project[];
|
|
18
|
+
upsertSession(session: Session): void;
|
|
19
|
+
getSession(id: string): Session | null;
|
|
20
|
+
listSessions(projectId?: string, activeOnly?: boolean): Session[];
|
|
21
|
+
deactivateSession(id: string): void;
|
|
22
|
+
insertEvent(event: {
|
|
23
|
+
id: string;
|
|
24
|
+
sessionId: string;
|
|
25
|
+
eventType: string;
|
|
26
|
+
payload: any;
|
|
27
|
+
timestamp: number;
|
|
28
|
+
route?: string;
|
|
29
|
+
url?: string;
|
|
30
|
+
}): void;
|
|
31
|
+
pruneSessionEvents(sessionId: string, maxEvents?: number): void;
|
|
32
|
+
getEvents(options: {
|
|
33
|
+
sessionId?: string;
|
|
34
|
+
eventType?: string;
|
|
35
|
+
limit?: number;
|
|
36
|
+
}): any[];
|
|
37
|
+
findIncidentByFingerprint(fingerprint: string): Incident | null;
|
|
38
|
+
getIncident(id: string): Incident | null;
|
|
39
|
+
listIncidents(options?: {
|
|
40
|
+
projectId?: string;
|
|
41
|
+
status?: IncidentStatus;
|
|
42
|
+
severity?: IncidentSeverity;
|
|
43
|
+
limit?: number;
|
|
44
|
+
}): Incident[];
|
|
45
|
+
insertIncident(incident: Incident): void;
|
|
46
|
+
updateIncidentOccurrence(incidentId: string, update: {
|
|
47
|
+
sessionId: string;
|
|
48
|
+
lastSeen: string;
|
|
49
|
+
occurrences: number;
|
|
50
|
+
route: string;
|
|
51
|
+
breadcrumbs: Breadcrumb[];
|
|
52
|
+
lastElement?: ElementSummary;
|
|
53
|
+
stack?: string;
|
|
54
|
+
}): void;
|
|
55
|
+
updateIncidentStatus(id: string, status: IncidentStatus): void;
|
|
56
|
+
insertIncidentOccurrence(occurrence: IncidentOccurrence): void;
|
|
57
|
+
insertVerification(v: {
|
|
58
|
+
id: string;
|
|
59
|
+
incidentId: string;
|
|
60
|
+
status: IncidentStatus;
|
|
61
|
+
checks: any[];
|
|
62
|
+
beforeScreenshot?: string;
|
|
63
|
+
afterScreenshot?: string;
|
|
64
|
+
message?: string;
|
|
65
|
+
createdAt: string;
|
|
66
|
+
}): void;
|
|
67
|
+
getLatestVerification(incidentId: string): VerificationResult | null;
|
|
68
|
+
insertNote(note: VisualNote): void;
|
|
69
|
+
getNote(id: string): VisualNote | null;
|
|
70
|
+
listNotes(options?: {
|
|
71
|
+
projectId?: string;
|
|
72
|
+
status?: NoteStatus;
|
|
73
|
+
route?: string;
|
|
74
|
+
limit?: number;
|
|
75
|
+
}): VisualNote[];
|
|
76
|
+
deleteNote(id: string): void;
|
|
77
|
+
updateNoteStatus(id: string, status: NoteStatus): void;
|
|
78
|
+
updateNote(id: string, updates: Partial<VisualNote>): void;
|
|
79
|
+
insertNoteVerification(v: NoteVerificationResult): void;
|
|
80
|
+
getLatestNoteVerification(noteId: string): NoteVerificationResult | null;
|
|
81
|
+
clearAll(): void;
|
|
82
|
+
private mapIncidentRow;
|
|
83
|
+
private mapNoteRow;
|
|
84
|
+
close(): void;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
declare class ScreenshotStore {
|
|
88
|
+
private baseDir;
|
|
89
|
+
constructor(baseDir: string);
|
|
90
|
+
saveScreenshot(projectId: string, incidentId: string, name: string, dataUrl: string): {
|
|
91
|
+
filePath: string;
|
|
92
|
+
format: string;
|
|
93
|
+
} | null;
|
|
94
|
+
getScreenshotPath(projectId: string, incidentId: string, name: string): string | null;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
declare class SessionManager {
|
|
98
|
+
private activeSockets;
|
|
99
|
+
private db;
|
|
100
|
+
constructor(db: StorageDB);
|
|
101
|
+
registerSocket(sessionId: string, ws: WebSocket, origin: string, projectId: string): void;
|
|
102
|
+
unregisterSocket(sessionId: string): void;
|
|
103
|
+
handleCommandResponse(sessionId: string, response: CommandResponse): void;
|
|
104
|
+
sendCommand<T = any>(sessionId: string, command: ClientCommand<T>, timeoutMs?: number): Promise<CommandResponse>;
|
|
105
|
+
getActiveSessionForProject(projectId: string): Session | null;
|
|
106
|
+
getAnyActiveSession(): Session | null;
|
|
107
|
+
getActiveCount(): number;
|
|
108
|
+
broadcastToProject(projectId: string, message: any): void;
|
|
109
|
+
sendToSession(sessionId: string, message: any): void;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
declare class NotesEngine {
|
|
113
|
+
private db;
|
|
114
|
+
private screenshotStore;
|
|
115
|
+
constructor(db: StorageDB, screenshotStore: ScreenshotStore);
|
|
116
|
+
createNoteFromClient(payload: {
|
|
117
|
+
sessionId: string;
|
|
118
|
+
noteType?: 'element' | 'region' | 'page';
|
|
119
|
+
message: string;
|
|
120
|
+
route?: string;
|
|
121
|
+
url?: string;
|
|
122
|
+
viewport?: {
|
|
123
|
+
width: number;
|
|
124
|
+
height: number;
|
|
125
|
+
devicePixelRatio: number;
|
|
126
|
+
};
|
|
127
|
+
scroll?: {
|
|
128
|
+
scrollX: number;
|
|
129
|
+
scrollY: number;
|
|
130
|
+
};
|
|
131
|
+
target?: any;
|
|
132
|
+
elementContext?: any;
|
|
133
|
+
region?: any;
|
|
134
|
+
screenshot?: string;
|
|
135
|
+
incidentId?: string;
|
|
136
|
+
}): VisualNote;
|
|
137
|
+
saveNoteScreenshot(projectId: string, noteId: string, name: string, dataUrl: string): string | null;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
declare class NoteVerificationEngine {
|
|
141
|
+
private db;
|
|
142
|
+
private sessionManager;
|
|
143
|
+
private notesEngine;
|
|
144
|
+
constructor(db: StorageDB, sessionManager: SessionManager, notesEngine: NotesEngine);
|
|
145
|
+
verifyNote(noteId: string, options?: {
|
|
146
|
+
observationWindowMs?: number;
|
|
147
|
+
}): Promise<NoteVerificationResult>;
|
|
148
|
+
private recordNoteVerification;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
declare class VerificationEngine {
|
|
152
|
+
private db;
|
|
153
|
+
private sessionManager;
|
|
154
|
+
private screenshotStore;
|
|
155
|
+
constructor(db: StorageDB, sessionManager: SessionManager, screenshotStore: ScreenshotStore);
|
|
156
|
+
verifyIncident(incidentId: string, recipe?: VerificationRecipe): Promise<VerificationResult>;
|
|
157
|
+
private evaluateProbe;
|
|
158
|
+
private recordVerification;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export { NoteVerificationEngine as N, StorageDB as S, VerificationEngine as V, SessionManager as a, ScreenshotStore as b, NotesEngine as c };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { B as Breadcrumb, C as CaptureElementParams, a as CaptureElementResult, b as ClientCommand, c as ClientEventMessage, d as CommandResponse, e as CommandType, f as ConsoleEvent, g as ConsoleLevel, D as DOMRectJson, E as ElementContext, h as ElementStyleResult, i as ElementSummary, j as EventType, H as HelloMessage, N as NavigateParams, k as NavigationEvent, l as NetworkEvent, m as NoteStatus, n as NoteTarget, o as NoteType, p as NoteVerificationResult, O as OverflowCheckResult, P as PageStateResult, Q as QueryElementParams, q as QueryElementResult, R as RegionContext, r as ReloadParams, s as RuntimeErrorEvent, S as ScrollContext, V as ViewportContext, t as VisualNote } from './notes-CBvN91Wf.js';
|
|
2
|
+
export { I as Incident, a as IncidentOccurrence, b as IncidentSeverity, c as IncidentSource, d as IncidentStatus, P as ProbeResult, e as ProbeType, f as Project, S as Session, V as VerificationProbe, g as VerificationRecipe, h as VerificationResult } from './projects-CY8ungMt.js';
|
|
3
|
+
export { BROWSER_SECURITY_RULES, FingerprintInput, REDACTED_PLACEHOLDER, SENSITIVE_KEY_PATTERNS, SENSITIVE_QUERY_PARAMS, SelectorOptions, computeFingerprint, extractSourceFromStack, getSemanticSelector, isSensitiveKey, normalizeErrorMessage, normalizeSourceFile, redactHeaders, redactSensitiveData, redactUrl, truncate } from './core/index.js';
|
|
4
|
+
export { BrowserTrackClient, getClient, init as initClient } from './client/index.js';
|
|
5
|
+
export { BrowserTrackDaemon, createDaemon } from './daemon/index.js';
|
|
6
|
+
export { c as createMcpServer } from './server-Dd8NX2Mk.js';
|
|
7
|
+
export { Rules, standardRules, redact as visulimaRedact } from '@visulima/redact';
|
|
8
|
+
import './engine-CeT9URuN.js';
|
|
9
|
+
import 'ws';
|
|
10
|
+
import 'node:http';
|
|
11
|
+
import '@modelcontextprotocol/sdk/server/index.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BrowserTrackClient,
|
|
3
|
+
getClient,
|
|
4
|
+
init
|
|
5
|
+
} from "./chunk-SKCMT2DE.js";
|
|
6
|
+
import {
|
|
7
|
+
BrowserTrackDaemon,
|
|
8
|
+
createDaemon
|
|
9
|
+
} from "./chunk-SPCIROIU.js";
|
|
10
|
+
import {
|
|
11
|
+
BROWSER_SECURITY_RULES,
|
|
12
|
+
REDACTED_PLACEHOLDER,
|
|
13
|
+
SENSITIVE_KEY_PATTERNS,
|
|
14
|
+
SENSITIVE_QUERY_PARAMS,
|
|
15
|
+
computeFingerprint,
|
|
16
|
+
extractSourceFromStack,
|
|
17
|
+
getSemanticSelector,
|
|
18
|
+
isSensitiveKey,
|
|
19
|
+
normalizeErrorMessage,
|
|
20
|
+
normalizeSourceFile,
|
|
21
|
+
redactHeaders,
|
|
22
|
+
redactSensitiveData,
|
|
23
|
+
redactUrl,
|
|
24
|
+
standardRules,
|
|
25
|
+
truncate,
|
|
26
|
+
visulimaRedact
|
|
27
|
+
} from "./chunk-6VA7GBAO.js";
|
|
28
|
+
import {
|
|
29
|
+
createMcpServer
|
|
30
|
+
} from "./chunk-G2Y3CXCY.js";
|
|
31
|
+
import "./chunk-ILRYKMME.js";
|
|
32
|
+
export {
|
|
33
|
+
BROWSER_SECURITY_RULES,
|
|
34
|
+
BrowserTrackClient,
|
|
35
|
+
BrowserTrackDaemon,
|
|
36
|
+
REDACTED_PLACEHOLDER,
|
|
37
|
+
SENSITIVE_KEY_PATTERNS,
|
|
38
|
+
SENSITIVE_QUERY_PARAMS,
|
|
39
|
+
computeFingerprint,
|
|
40
|
+
createDaemon,
|
|
41
|
+
createMcpServer,
|
|
42
|
+
extractSourceFromStack,
|
|
43
|
+
getClient,
|
|
44
|
+
getSemanticSelector,
|
|
45
|
+
init as initClient,
|
|
46
|
+
isSensitiveKey,
|
|
47
|
+
normalizeErrorMessage,
|
|
48
|
+
normalizeSourceFile,
|
|
49
|
+
redactHeaders,
|
|
50
|
+
redactSensitiveData,
|
|
51
|
+
redactUrl,
|
|
52
|
+
standardRules,
|
|
53
|
+
truncate,
|
|
54
|
+
visulimaRedact
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
export { M as McpContext, a as McpServerOptions, c as createMcpServer, h as handleToolCall } from '../server-Dd8NX2Mk.js';
|
|
3
|
+
import '@modelcontextprotocol/sdk/server/index.js';
|
|
4
|
+
import '../engine-CeT9URuN.js';
|
|
5
|
+
import '../notes-CBvN91Wf.js';
|
|
6
|
+
import '../projects-CY8ungMt.js';
|
|
7
|
+
import 'ws';
|
|
8
|
+
|
|
9
|
+
declare const TOOLS: Tool[];
|
|
10
|
+
|
|
11
|
+
export { TOOLS };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|