gitextract_z2lghh3p/ ├── .dockerignore ├── .env.example ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ ├── feature_request.md │ │ └── question.md │ ├── auto-assign.yml │ ├── labeler.yml │ ├── labels.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── auto-assign.yml │ ├── build-docker.yml │ ├── check-build.yml │ ├── pr-checks.yml │ ├── release.yml │ └── welcome.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ └── pre-commit ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── api/ │ ├── .dockerignore │ ├── .env.example │ ├── .gitattributes │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc │ ├── .puppeteerrc.cjs │ ├── Dockerfile │ ├── entrypoint.sh │ ├── extensions/ │ │ └── recorder/ │ │ ├── .gitignore │ │ ├── manifest.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── background.js │ │ │ └── inject.js │ │ └── webpack.config.mjs │ ├── nginx.conf │ ├── openapi/ │ │ ├── generate.ts │ │ └── schemas.json │ ├── package.json │ ├── selenium/ │ │ ├── driver/ │ │ │ ├── LICENSE.chromedriver │ │ │ ├── THIRD_PARTY_NOTICES.chromedriver │ │ │ └── chromedriver2 │ │ └── server/ │ │ └── selenium-server.jar │ ├── src/ │ │ ├── config.ts │ │ ├── env.ts │ │ ├── index.ts │ │ ├── modules/ │ │ │ ├── actions/ │ │ │ │ ├── actions.controller.ts │ │ │ │ ├── actions.routes.ts │ │ │ │ └── actions.schema.ts │ │ │ ├── cdp/ │ │ │ │ ├── cdp.routes.ts │ │ │ │ └── cdp.schemas.ts │ │ │ ├── files/ │ │ │ │ ├── files.controller.ts │ │ │ │ ├── files.routes.ts │ │ │ │ └── files.schema.ts │ │ │ ├── logs/ │ │ │ │ ├── logs.routes.ts │ │ │ │ └── logs.schema.ts │ │ │ ├── selenium/ │ │ │ │ ├── selenium.routes.ts │ │ │ │ └── selenium.schema.ts │ │ │ └── sessions/ │ │ │ ├── sessions.controller.ts │ │ │ ├── sessions.routes.ts │ │ │ └── sessions.schema.ts │ │ ├── plugins/ │ │ │ ├── browser-session.ts │ │ │ ├── browser-socket/ │ │ │ │ ├── browser-socket.ts │ │ │ │ ├── casting.handler.ts │ │ │ │ └── handlers/ │ │ │ │ ├── cast.handler.ts │ │ │ │ ├── index.ts │ │ │ │ ├── logs.handler.ts │ │ │ │ ├── pageId.handler.ts │ │ │ │ └── recording.handler.ts │ │ │ ├── browser.ts │ │ │ ├── custom-body-parser.ts │ │ │ ├── file-storage.ts │ │ │ ├── request-logger.ts │ │ │ ├── scalar-theme.ts │ │ │ ├── schemas.ts │ │ │ ├── selenium.ts │ │ │ └── ui-plugin.ts │ │ ├── routes.ts │ │ ├── scripts/ │ │ │ ├── fingerprint.js │ │ │ └── index.ts │ │ ├── services/ │ │ │ ├── cdp/ │ │ │ │ ├── cdp.service.ts │ │ │ │ ├── errors/ │ │ │ │ │ └── launch-errors.ts │ │ │ │ ├── instrumentation/ │ │ │ │ │ ├── browser-logger.test.ts │ │ │ │ │ ├── browser-logger.ts │ │ │ │ │ ├── cdp-events.ts │ │ │ │ │ ├── extension-events.ts │ │ │ │ │ ├── page-console.ts │ │ │ │ │ ├── page-events.ts │ │ │ │ │ ├── storage/ │ │ │ │ │ │ ├── duckdb-storage.ts │ │ │ │ │ │ ├── in-memory-storage.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── log-storage.interface.ts │ │ │ │ │ │ └── safe-json.ts │ │ │ │ │ ├── target-manager.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.ts │ │ │ │ │ └── worker-events.ts │ │ │ │ ├── plugins/ │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── base-plugin.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── plugin-manager.ts │ │ │ │ │ └── pptr-extensions.d.ts │ │ │ │ └── utils/ │ │ │ │ ├── error-handlers.ts │ │ │ │ └── validation.ts │ │ │ ├── context/ │ │ │ │ ├── chrome-context.service.ts │ │ │ │ └── types.ts │ │ │ ├── file.service.ts │ │ │ ├── leveldb/ │ │ │ │ ├── localstorage.ts │ │ │ │ └── sessionstorage.ts │ │ │ ├── selenium.service.ts │ │ │ ├── session.service.ts │ │ │ ├── timezone-fetcher.service.ts │ │ │ └── websocket-registry.service.ts │ │ ├── steel-browser-plugin.ts │ │ ├── telemetry/ │ │ │ ├── noop.ts │ │ │ └── tracer.ts │ │ ├── templates/ │ │ │ └── live-session-streamer.ejs │ │ ├── types/ │ │ │ ├── browser.ts │ │ │ ├── casting.ts │ │ │ ├── enums.ts │ │ │ ├── fastify.d.ts │ │ │ ├── index.ts │ │ │ ├── turndown.d.ts │ │ │ └── websocket.ts │ │ └── utils/ │ │ ├── browser.ts │ │ ├── casting.ts │ │ ├── context.ts │ │ ├── errors.ts │ │ ├── extensions.ts │ │ ├── leveldb.ts │ │ ├── logging.ts │ │ ├── passthough-proxy.ts │ │ ├── proxy.ts │ │ ├── requests.ts │ │ ├── retry.ts │ │ ├── schema.ts │ │ ├── scrape/ │ │ │ ├── cleanHtml.ts │ │ │ ├── htmlToMarkdown.ts │ │ │ ├── index.ts │ │ │ ├── pdfToHtml.ts │ │ │ ├── plugins/ │ │ │ │ ├── highlightedCodeBlock.ts │ │ │ │ ├── inlineLink.ts │ │ │ │ ├── strikethrough.ts │ │ │ │ ├── table.ts │ │ │ │ ├── taskListItems.ts │ │ │ │ └── utilities.ts │ │ │ ├── readability.ts │ │ │ ├── safeGoTo.ts │ │ │ └── transformHtml.ts │ │ ├── size.ts │ │ ├── text.ts │ │ └── url.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── commitlint.config.cjs ├── docker-compose.dev.yml ├── docker-compose.yml ├── docs/ │ ├── ARCHITECTURE.md │ ├── DEVELOPMENT_SETUP.md │ ├── PLUGIN_DEVELOPMENT.md │ ├── README.md │ └── TROUBLESHOOTING.md ├── nginx.conf ├── package.json ├── render.yaml ├── repl/ │ ├── README.md │ ├── package.json │ └── src/ │ └── script.ts └── ui/ ├── .dockerignore ├── .eslintrc.cjs ├── .gitignore ├── Dockerfile ├── README.md ├── components.json ├── entrypoint.sh ├── index.html ├── nginx.conf.template ├── openapi-ts.config.ts ├── package.json ├── postcss.config.js ├── src/ │ ├── App.tsx │ ├── components/ │ │ ├── badges/ │ │ │ ├── proxy-badge.tsx │ │ │ ├── user-agent-badge.tsx │ │ │ └── websocket-url-badge.tsx │ │ ├── header/ │ │ │ ├── header.tsx │ │ │ └── index.tsx │ │ ├── icons/ │ │ │ ├── ChromeIcon.tsx │ │ │ ├── DeleteIcon.tsx │ │ │ ├── GlobeIcon.tsx │ │ │ ├── GlowingGreenDot.tsx │ │ │ ├── KeyIcon.tsx │ │ │ ├── LoadingSpinner.tsx │ │ │ ├── NinjaIcon.tsx │ │ │ ├── SessionIcon.tsx │ │ │ └── SettingsIcon.tsx │ │ ├── illustrations/ │ │ │ ├── command-line.tsx │ │ │ └── globe.tsx │ │ ├── loading/ │ │ │ ├── Loading.styles.tsx │ │ │ ├── Loading.tsx │ │ │ └── index.tsx │ │ ├── sessions/ │ │ │ ├── release-session-dialog.tsx │ │ │ ├── session-console/ │ │ │ │ ├── index.tsx │ │ │ │ ├── session-details.tsx │ │ │ │ ├── session-devtools.tsx │ │ │ │ └── session-logs.tsx │ │ │ └── session-viewer/ │ │ │ ├── empty-state.tsx │ │ │ ├── example-events/ │ │ │ │ ├── example-events.json │ │ │ │ └── test.json │ │ │ ├── index.tsx │ │ │ ├── live-empty-state.tsx │ │ │ ├── session-viewer-controls.css │ │ │ └── session-viewer.tsx │ │ ├── theme-provider.tsx │ │ └── ui/ │ │ ├── avatar.tsx │ │ ├── badge.tsx │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── checkbox.tsx │ │ ├── dialog.tsx │ │ ├── form.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── pagination.tsx │ │ ├── popover.tsx │ │ ├── select.tsx │ │ ├── separator.tsx │ │ ├── table.tsx │ │ ├── tabs.tsx │ │ ├── toast.tsx │ │ └── toaster.tsx │ ├── containers/ │ │ └── session-container.tsx │ ├── contexts/ │ │ └── sessions-context/ │ │ ├── index.tsx │ │ ├── sessions-context.tsx │ │ └── sessions-context.types.ts │ ├── env.ts │ ├── fonts/ │ │ ├── Geist/ │ │ │ ├── Geist-Black.otf │ │ │ ├── Geist-Bold.otf │ │ │ ├── Geist-Light.otf │ │ │ ├── Geist-Medium.otf │ │ │ ├── Geist-Regular.otf │ │ │ ├── Geist-SemiBold.otf │ │ │ ├── Geist-Thin.otf │ │ │ ├── Geist-UltraBlack.otf │ │ │ ├── Geist-UltraLight.otf │ │ │ └── LICENSE.TXT │ │ └── GeistMono/ │ │ ├── GeistMono-Black.otf │ │ ├── GeistMono-Bold.otf │ │ ├── GeistMono-Light.otf │ │ ├── GeistMono-Medium.otf │ │ ├── GeistMono-Regular.otf │ │ ├── GeistMono-SemiBold.otf │ │ ├── GeistMono-Thin.otf │ │ ├── GeistMono-UltraBlack.otf │ │ ├── GeistMono-UltraLight.otf │ │ └── LICENSE.TXT │ ├── hooks/ │ │ ├── use-sessions-context.ts │ │ └── use-toast.ts │ ├── index.css │ ├── lib/ │ │ ├── query-client.ts │ │ └── utils.ts │ ├── main.tsx │ ├── root-layout.tsx │ ├── steel-client/ │ │ ├── index.ts │ │ ├── schemas.gen.ts │ │ ├── services.gen.ts │ │ └── types.gen.ts │ ├── styles/ │ │ ├── common.styles.tsx │ │ └── theme.ts │ ├── types/ │ │ ├── cdp.ts │ │ └── props.ts │ ├── utils/ │ │ ├── formatting.ts │ │ └── toasts.ts │ └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.json ├── tsconfig.node.json ├── vercel.json └── vite.config.ts