gitextract_xtlqk229/ ├── .changeset/ │ ├── README.md │ └── config.json ├── .github/ │ └── workflows/ │ ├── code-quality.yml │ ├── publish-any-commit.yml │ ├── pullfrog.yml │ ├── test-build.yml │ ├── test-cli.yml │ └── test-e2e.yml ├── .gitignore ├── .oxfmtrc.json ├── AGENTS.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── package.json ├── packages/ │ ├── cli/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── commands/ │ │ │ │ ├── add.ts │ │ │ │ ├── configure.ts │ │ │ │ ├── init.ts │ │ │ │ └── remove.ts │ │ │ └── utils/ │ │ │ ├── cli-helpers.ts │ │ │ ├── constants.ts │ │ │ ├── detect.ts │ │ │ ├── diff.ts │ │ │ ├── handle-error.ts │ │ │ ├── highlighter.ts │ │ │ ├── install-mcp.ts │ │ │ ├── install.ts │ │ │ ├── is-non-interactive.ts │ │ │ ├── logger.ts │ │ │ ├── prompts.ts │ │ │ ├── spinner.ts │ │ │ ├── templates.ts │ │ │ └── transform.ts │ │ ├── test/ │ │ │ ├── configure.test.ts │ │ │ ├── detect.test.ts │ │ │ ├── diff.test.ts │ │ │ ├── install-mcp.test.ts │ │ │ ├── install.test.ts │ │ │ ├── templates.test.ts │ │ │ └── transform.test.ts │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── vitest.config.ts │ ├── design-system/ │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.tsx │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── e2e-playground/ │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ └── main.tsx │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── grab/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin/ │ │ │ └── cli.js │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── build.js │ │ └── tsconfig.json │ ├── gym/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── api/ │ │ │ │ └── provider/ │ │ │ │ └── [name]/ │ │ │ │ └── route.ts │ │ │ ├── dashboard/ │ │ │ │ ├── data.json │ │ │ │ └── page.tsx │ │ │ ├── freeze-demo/ │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ ├── login/ │ │ │ │ └── page.tsx │ │ │ ├── page.tsx │ │ │ └── playground/ │ │ │ └── page.tsx │ │ ├── components/ │ │ │ ├── agent-playground.tsx │ │ │ ├── app-sidebar.tsx │ │ │ ├── chart-area-interactive.tsx │ │ │ ├── counter.tsx │ │ │ ├── data-table.tsx │ │ │ ├── login-form.tsx │ │ │ ├── nav-user.tsx │ │ │ ├── search-form.tsx │ │ │ ├── section-cards.tsx │ │ │ ├── sheet-demo.tsx │ │ │ ├── site-header.tsx │ │ │ ├── theme-provider.tsx │ │ │ ├── theme-toggle.tsx │ │ │ ├── ui/ │ │ │ │ ├── avatar.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── chart.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── drawer.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── field.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── sheet.tsx │ │ │ │ ├── sidebar.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── toggle-group.tsx │ │ │ │ ├── toggle.tsx │ │ │ │ └── tooltip.tsx │ │ │ └── version-switcher.tsx │ │ ├── components.json │ │ ├── hooks/ │ │ │ └── use-mobile.ts │ │ ├── instrumentation-client.ts │ │ ├── lib/ │ │ │ └── utils.ts │ │ ├── next-env.d.ts │ │ ├── next.config.ts │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ ├── scripts/ │ │ │ └── start-all-servers.js │ │ └── tsconfig.json │ ├── mcp/ │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── client.ts │ │ │ ├── constants.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── provider-amp/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── client.ts │ │ │ ├── handler.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── provider-claude-code/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── client.ts │ │ │ ├── handler.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── provider-codex/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── client.ts │ │ │ ├── handler.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── provider-copilot/ │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── client.ts │ │ │ ├── handler.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── provider-cursor/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── client.ts │ │ │ ├── handler.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── provider-droid/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── client.ts │ │ │ ├── handler.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── provider-gemini/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── client.ts │ │ │ ├── handler.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── provider-opencode/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── client.ts │ │ │ ├── constants.ts │ │ │ ├── handler.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── react-grab/ │ │ ├── .oxlintrc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── bin/ │ │ │ └── cli.js │ │ ├── e2e/ │ │ │ ├── activation-key-config.spec.ts │ │ │ ├── activation.spec.ts │ │ │ ├── agent-integration.spec.ts │ │ │ ├── agent-resume-race.spec.ts │ │ │ ├── api-methods.spec.ts │ │ │ ├── clear-history-prompt.spec.ts │ │ │ ├── context-menu.spec.ts │ │ │ ├── copy-feedback.spec.ts │ │ │ ├── copy-styles.spec.ts │ │ │ ├── disabled-elements.spec.ts │ │ │ ├── drag-selection.spec.ts │ │ │ ├── edge-cases.spec.ts │ │ │ ├── element-context.spec.ts │ │ │ ├── event-callbacks.spec.ts │ │ │ ├── fixtures.ts │ │ │ ├── focus-trap.spec.ts │ │ │ ├── freeze-animations.spec.ts │ │ │ ├── freeze-updates.spec.ts │ │ │ ├── history-items.spec.ts │ │ │ ├── history-reacquire.spec.ts │ │ │ ├── hold-activation.spec.ts │ │ │ ├── input-mode.spec.ts │ │ │ ├── keyboard-navigation.spec.ts │ │ │ ├── keyboard-shortcuts.spec.ts │ │ │ ├── open-file.spec.ts │ │ │ ├── overlay-filtering.spec.ts │ │ │ ├── prompt-mode.spec.ts │ │ │ ├── selection.spec.ts │ │ │ ├── ssr.spec.ts │ │ │ ├── theme-customization.spec.ts │ │ │ ├── toggle-position-stability.spec.ts │ │ │ ├── toolbar-menu.spec.ts │ │ │ ├── toolbar-selection-hover.spec.ts │ │ │ ├── toolbar.spec.ts │ │ │ ├── touch-mode.spec.ts │ │ │ ├── viewport.spec.ts │ │ │ └── visual-feedback.spec.ts │ │ ├── package.json │ │ ├── playwright.config.ts │ │ ├── scripts/ │ │ │ ├── css-rem-to-px.mjs │ │ │ └── postinstall.cjs │ │ ├── src/ │ │ │ ├── components/ │ │ │ │ ├── clear-history-prompt.tsx │ │ │ │ ├── context-menu.tsx │ │ │ │ ├── history-dropdown.tsx │ │ │ │ ├── icons/ │ │ │ │ │ ├── icon-check.tsx │ │ │ │ │ ├── icon-chevron.tsx │ │ │ │ │ ├── icon-clock.tsx │ │ │ │ │ ├── icon-copy.tsx │ │ │ │ │ ├── icon-ellipsis.tsx │ │ │ │ │ ├── icon-loader.tsx │ │ │ │ │ ├── icon-open.tsx │ │ │ │ │ ├── icon-reply.tsx │ │ │ │ │ ├── icon-retry.tsx │ │ │ │ │ ├── icon-return.tsx │ │ │ │ │ ├── icon-select.tsx │ │ │ │ │ ├── icon-submit.tsx │ │ │ │ │ └── icon-trash.tsx │ │ │ │ ├── kbd.tsx │ │ │ │ ├── overlay-canvas.tsx │ │ │ │ ├── renderer.tsx │ │ │ │ ├── selection-label/ │ │ │ │ │ ├── arrow-navigation-menu.tsx │ │ │ │ │ ├── arrow.tsx │ │ │ │ │ ├── bottom-section.tsx │ │ │ │ │ ├── completion-view.tsx │ │ │ │ │ ├── discard-prompt.tsx │ │ │ │ │ ├── error-view.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── tag-badge.tsx │ │ │ │ ├── toolbar/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── state.ts │ │ │ │ │ ├── toolbar-content.tsx │ │ │ │ │ └── toolbar-menu.tsx │ │ │ │ └── tooltip.tsx │ │ │ ├── constants.ts │ │ │ ├── core/ │ │ │ │ ├── agent/ │ │ │ │ │ ├── manager.ts │ │ │ │ │ └── session.ts │ │ │ │ ├── arrow-navigation.ts │ │ │ │ ├── auto-scroll.ts │ │ │ │ ├── context.ts │ │ │ │ ├── copy.ts │ │ │ │ ├── events.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── keyboard-handlers.ts │ │ │ │ ├── log-intro.ts │ │ │ │ ├── logo-svg.ts │ │ │ │ ├── noop-api.ts │ │ │ │ ├── plugin-registry.ts │ │ │ │ ├── plugins/ │ │ │ │ │ ├── comment.ts │ │ │ │ │ ├── copy-html.ts │ │ │ │ │ ├── copy-styles.ts │ │ │ │ │ ├── copy.ts │ │ │ │ │ ├── create-pending-selection-plugin.ts │ │ │ │ │ └── open.ts │ │ │ │ ├── store.ts │ │ │ │ └── theme.ts │ │ │ ├── index.ts │ │ │ ├── primitives.ts │ │ │ ├── styles.css │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── append-stack-context.ts │ │ │ ├── auto-resize-textarea.ts │ │ │ ├── clamp-to-viewport.ts │ │ │ ├── cn.ts │ │ │ ├── combine-bounds.ts │ │ │ ├── confirmation-focus-manager.ts │ │ │ ├── copy-content.ts │ │ │ ├── create-anchored-dropdown.ts │ │ │ ├── create-bounds-from-drag-rect.ts │ │ │ ├── create-element-bounds.ts │ │ │ ├── create-element-selector.ts │ │ │ ├── create-menu-highlight.ts │ │ │ ├── create-style-element.ts │ │ │ ├── create-toolbar-drag.ts │ │ │ ├── extract-element-css.ts │ │ │ ├── format-relative-time.ts │ │ │ ├── format-shortcut.ts │ │ │ ├── freeze-animations.ts │ │ │ ├── freeze-gsap.ts │ │ │ ├── freeze-pseudo-states.ts │ │ │ ├── freeze-updates.ts │ │ │ ├── generate-id.ts │ │ │ ├── generate-snippet.ts │ │ │ ├── get-anchored-dropdown-position.ts │ │ │ ├── get-arrow-size.ts │ │ │ ├── get-bounds-center.ts │ │ │ ├── get-element-at-position.ts │ │ │ ├── get-element-center.ts │ │ │ ├── get-elements-in-drag.ts │ │ │ ├── get-next-base-path.ts │ │ │ ├── get-script-options.ts │ │ │ ├── get-tag-display.ts │ │ │ ├── get-tag-name.ts │ │ │ ├── get-visible-bounds-center.ts │ │ │ ├── get-visual-viewport.ts │ │ │ ├── history-storage.ts │ │ │ ├── invalidate-interaction-caches.ts │ │ │ ├── is-c-like-key.ts │ │ │ ├── is-element-connected.ts │ │ │ ├── is-element-visible.ts │ │ │ ├── is-enter-code.ts │ │ │ ├── is-event-from-overlay.ts │ │ │ ├── is-extension-context.ts │ │ │ ├── is-keyboard-event-triggered-by-input.ts │ │ │ ├── is-mac.ts │ │ │ ├── is-root-element.ts │ │ │ ├── is-target-key-combination.ts │ │ │ ├── is-valid-grabbable-element.ts │ │ │ ├── join-snippets.ts │ │ │ ├── key-matches-code.ts │ │ │ ├── lerp.ts │ │ │ ├── log-recoverable-error.ts │ │ │ ├── mount-root.ts │ │ │ ├── native-raf.ts │ │ │ ├── normalize-error.ts │ │ │ ├── on-idle.ts │ │ │ ├── open-file.ts │ │ │ ├── overlay-color.ts │ │ │ ├── parse-activation-key.ts │ │ │ ├── recalculate-session-position.ts │ │ │ ├── register-overlay-dismiss.ts │ │ │ ├── resolve-action-enabled.ts │ │ │ ├── safe-polygon.ts │ │ │ ├── strip-translate-from-transform.ts │ │ │ ├── supports-display-p3.ts │ │ │ ├── suppress-menu-event.ts │ │ │ ├── toolbar-layout.ts │ │ │ ├── toolbar-position.ts │ │ │ └── truncate-string.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── relay/ │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── client.ts │ │ │ ├── connection.ts │ │ │ ├── index.ts │ │ │ ├── protocol.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── shadcn-registry/ │ │ ├── package.json │ │ ├── r/ │ │ │ └── react-grab.json │ │ ├── registry/ │ │ │ └── react-grab.tsx │ │ ├── registry.json │ │ └── scripts/ │ │ └── build.js │ ├── utils/ │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── web-extension/ │ │ ├── .gitignore │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── package.sh │ │ ├── src/ │ │ │ ├── background/ │ │ │ │ └── service-worker.ts │ │ │ ├── constants.ts │ │ │ ├── content/ │ │ │ │ ├── bridge.ts │ │ │ │ └── react-grab.ts │ │ │ └── manifest.json │ │ ├── tsconfig.json │ │ └── vite.config.ts │ └── website/ │ ├── .gitignore │ ├── .oxlintrc.json │ ├── AGENTS.md │ ├── app/ │ │ ├── api/ │ │ │ ├── og/ │ │ │ │ └── route.tsx │ │ │ ├── report-cli/ │ │ │ │ └── route.ts │ │ │ └── version/ │ │ │ └── route.ts │ │ ├── blog/ │ │ │ ├── 1-0/ │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── agent/ │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── bets/ │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── intro/ │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── changelog/ │ │ │ └── page.tsx │ │ ├── design-system/ │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── globals.css │ │ ├── layout.tsx │ │ ├── not-found.tsx │ │ ├── open-file/ │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── page.tsx │ │ ├── privacy/ │ │ │ └── page.tsx │ │ ├── robots.ts │ │ └── sitemap.ts │ ├── components/ │ │ ├── benchmark-tooltip.tsx │ │ ├── benchmarks/ │ │ │ ├── benchmark-charts.tsx │ │ │ ├── benchmark-detailed-table.tsx │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── blocks/ │ │ │ ├── grep-search-group.tsx │ │ │ ├── grep-tool-call-block.tsx │ │ │ ├── message-block.tsx │ │ │ ├── read-tool-call-block.tsx │ │ │ ├── streaming-text.tsx │ │ │ └── thought-block.tsx │ │ ├── blog-article-layout.tsx │ │ ├── demo-footer.tsx │ │ ├── github-button.tsx │ │ ├── grab-element-button.tsx │ │ ├── homepage-demo.tsx │ │ ├── hotkey-context.tsx │ │ ├── icons/ │ │ │ ├── icon-claude.tsx │ │ │ ├── icon-codex.tsx │ │ │ ├── icon-copilot.tsx │ │ │ ├── icon-cursor.tsx │ │ │ ├── icon-droid.tsx │ │ │ ├── icon-github.tsx │ │ │ ├── icon-nextjs.tsx │ │ │ ├── icon-opencode.tsx │ │ │ ├── icon-tanstack.tsx │ │ │ ├── icon-vite.tsx │ │ │ ├── icon-vscode.tsx │ │ │ ├── icon-webstorm.tsx │ │ │ └── icon-zed.tsx │ │ ├── install-tabs.tsx │ │ ├── mobile-demo-animation.tsx │ │ ├── react-grab-logo.tsx │ │ ├── table-of-contents.tsx │ │ ├── ui/ │ │ │ ├── button.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── data-table-card.tsx │ │ │ └── scrollable.tsx │ │ ├── user-message.tsx │ │ └── view-docs-button.tsx │ ├── components.json │ ├── constants.ts │ ├── hooks/ │ │ └── use-stream.ts │ ├── instrumentation-client.ts │ ├── lib/ │ │ ├── api-helpers.ts │ │ └── shiki.ts │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.mjs │ ├── public/ │ │ ├── agent.webm │ │ ├── demo.webm │ │ ├── install.md │ │ ├── llms.txt │ │ ├── r/ │ │ │ ├── index.json │ │ │ └── react-grab.json │ │ ├── results.json │ │ └── test-cases.json │ ├── tsconfig.json │ └── utils/ │ ├── cn.ts │ ├── detect-mobile.ts │ ├── get-key-from-code.ts │ ├── hotkey-to-string.ts │ └── parse-changelog.ts ├── pnpm-workspace.yaml ├── turbo.json └── vercel.json